Я пытаюсь написать что-то в Python 2.7, чтобы создать много каталогов из.txt файла. До сих пор я получил это:
import os
path = '.'
system_name = open('systems.txt')
system = system_name.readline()
while system:
print(system)
for system in system:
os.mkdir(os.path.join(path,(system)))
system_name.close()
Мой входной файл выглядит следующим образом:
BaO_Fm-3m_26961_RPBE
BaZrO3_Pm-3m_90049_RPBE
BeO_P63mc_61181_RPBE
Bi2O3_P211c_15072_RPBE
CaMgSi2O6_C12c1_30522_RPBE
...
Проблема в том, что я получаю много папок, но все они создаются буквами по буквам из первой строки, а не по строкам, как я и предполагал.
Чем вы очень помогаете и наслаждаетесь своим днем,
Инго
readline()
читает одну строку. Затем вы перебираете эту линию, используя for system in system
, поэтому вы получаете каждый символ по очереди.
Удобно, что файлы в Python уже можно повторить по строкам:
system_name = open('systems.txt')
for system in system_name:
os.mkdir(os.path.join(path, system))
system_name.close()
Вы можете также смотреть в with
конструкцией, чтобы сделать это исключение безопасным.
Попытайтесь открыть файлы с инструкцией with для большей безопасности. Кроме того, вы можете перебирать файл с циклом for, который даст вам все строки.
with open('systems.txt') as system_name:
for line in system_name:
print(line)
line = line.strip() #to remove things like '\n'
os.mkdir(os.path.join(path, line))
Проблема в том, что вы выполняете итерацию по первой строке вместо списка строк, чтобы создавать папки для каждого символа из первой строки. Вместо этого используйте readlines
.
with open('systems.txt') as f:
lines = f.readlines()
for file_name in lines:
os.mkdir(os.path.join(path, file_name))
import os
path = '.'
lines = tuple(open('systems.txt', 'r'))
print lines
for system in lines:
os.mkdir(os.path.join(path,(system)))