#python
#python
Вопрос:
Мне нужна помощь! Мне нужно создать 10 подкаталогов: A1, A2, …, A10. Каждый подкаталог содержит файл с именем position и содержимым:
2.22222 0.44444 1.58810
5.77778 1.5556 0.41190
Конец каждого файла содержит позицию, соответствующую подкаталогу:
Например:
расположить в каталоге A1:
2.22222 0.44444 1.58810
5.77778 1.55556 0.41190
1.00000 1.00000 1.00000
позиция в каталоге A2 содержит
2.22222 0.44444 1.58810
5.77778 1.55556 0.41190
2.00000 2.00000 2.00000
Аналогично позиции в каталоге A3 содержит:
2.22222 0.44444 1.58810
5.77778 1.55556 0.41190
3.00000 3.00000 3.00000
И так далее. Я пытался кодировать на python, но это не сработало, когда появилась ошибка
IOError: [Ошибка 21] является каталогом:
import os
content = u"0.22222 0.44444 0.58810"
content = u"0.77778 0.55556 0.41190"
num = 0
for i in range(0, 10)
num = num 1
subdirectory = str("A") str(num)
os.mkdir (subdirectory)
filename = str(position)
for ip in open(filename):
with open (os.path.join(subdirectory)) as ip:
fp.write(content)
for ip in open(filename):
with open (os.path.join(subdirectory)) as ip:
ft.write"{:.5f} {:.5f} {:.5f} ".format(num, num, num)
Пожалуйста, помогите мне отладить этот код!
Комментарии:
1. можете ли вы исправить отступ?
2. кроме того, многие переменные не создаются!
Ответ №1:
ваш первый цикл for нуждается в двоеточии после бита «для i в диапазоне (0, 10)».
for i in range(0, 10)
num = num 1
может стать
for i in range (0, 10):
num = 1
это отсутствующее двоеточие — единственная ошибка, которую, я думаю, я вижу.
num = 1
делает то же самое, что и вы, просто это хороший и быстрый способ его кодирования. Ваш отступ также неверен, поэтому, если вы разберетесь и с этим, все должно быть в порядке.
Ответ №2:
pathlib значительно упрощает процесс обдумывания, поскольку он сам выполняет все объединения имен путей. Этот фрагмент кода создаст каталоги, если они не существуют, и создаст файл (если он не существует) и добавит 2.00000 2.00000 2.00000...
строки в каждый.
from pathlib import Path
dirnames = {'A01': 1, 'A02': 2, 'A03': 3, 'A10': 10}
basePath = Path('./foobar') # base path to work in
myFile = Path('file.txt') # name of each file to append to
repeats = 4 # number of times to repeat the appended value string
for name, value in dirnames.items():
# Create the file
myName = Path(basePath/name)
# Make the directories
try:
myName.mkdir()
except FileExistsError:
print('{} exists, skipping'.format(myName))
# make the string that will be appended to each file
myString = ''
print(myFile)
for i in range(0, repeats):
myString = myString ('{:.5f} '.format(value))
myString 'n'
fileName = Path(myName/myFile) # set the file name
# write the string out to the file
with fileName.open(mode='a') as dataOut:
dataOut.write(myString)
Ответ №3:
Это работает на моей машине.
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
# print(dir_path) #here, you will choose the working directory. currently, it is the same as your python file.
# for readibility, you can use multi-line string here.
content = '''
2.22222 0.44444 1.58810
5.77778 1.5556 0.41190
'''
for i in range(0, 10):
foldername = dir_path "\" 'a' str(i 1)
os.makedirs(foldername)
# use encoding 'utf-8' if you would like so.
with open(foldername "\position.txt",'w',encoding='utf-8') as
innerfile:
innerfile.write(content)
innerfile.write('{:.5f} {:.5f} {:.5f}'.format(i 1,i 1,i 1))