python создает файл в каждой вложенной папке

#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))