Я новичок в Python и немного борюсь с этой проблемой. Я хотел бы написать функцию, которая берет набор имен файлов BMP из файла с именем FileNames.txt
и печатает их в произвольном порядке в только что созданном файле с именем config_1.cfg
.Как написать каждую строку файла в новый файл в случайном порядке?
Имена файлов в FileNames.txt
файла выглядит следующим образом:
E1I11D0.bmp
E1I13D0.bmp
E1I15D0.bmp
E1I17D0.bmp
E1I19D0.bmp
E1I1D0.bmp
E1I21D0.bmp
Я хотел бы, чтобы они были выписаны в новом config_1.cfg
файла, который должен выглядеть примерно так:
#Filename: config_1.cfg
#Subject: 1
-PRESENT 1
[Back] "E1I11D0.bmp"
[Connect] 0 1
-CALIBRATION 1
[Connect] 0 2
-PRESENT 2
[Back] "E1I1D0.bmp"
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 4
-PRESENT 3
[Back] "E1I19D0.bmp"
[Connect] 0 5
Все имена файлов BMP в файле .txt
должны быть записаны в произвольном порядке. До сих пор я пытался генерировать .cfg
файл вроде этого:
import os
import random
curdir = os.getcwd()
os.chdir('/Users/UserName/Folder')
index = 1
count = 1
# Create output .cfg file
outfile = open('config_1' + '.cfg', 'w')
outfile.write('# Filename: config_1' + '\n');
outfile.write('#Subject: 1' + '\n');
#Get the BMP file names from the .txt file
with open('FileNames.txt', 'r') as fin:
fileId = list(fin)
random.shuffle(fileId)
for line in fileId:
outfile.write('-PRESENT ' + str(index) + '\n')
outfile.write('[Back] ' + str(fileId) + '.bmp' + '\r\n')
outfile.write('[Connect] 0 ' + str(index + 1) + '\r\n\r\n')
index += 1
# Add SHUTTERCALIBRATION after each instance of BMP file name being printed
caliblock = 1
for line in fileId:
outfile.write('-CALIBRATION ' + str(index) + '\r\n')
outfile.write('[Connect] 0 ' + str(index + 1) + '\r\n\r\n')
index += 1
За исключением, когда я запускаю код, я то, что я получаю в моем .cfg это:
# Filename: config_1
#Subject: 1
-PRESENT 1
[Back] ['E1_I1_3D0.bmp\r\n', 'E1_I1_5D0.bmp\r\n', 'E1_I1_D0.bmp\r\n', 'E1_I1_9D0.bmp\r\n', 'E1_I1_7D0.bmp\r\n', 'E1_I2_1D0.bmp\r\n', 'E1_I1_1D0.bmp\r\n'].bmp
[Connect] 0 2
-CALIBRATION 2
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 3
-CALIBRATION 2
[Connect] 0 3
-PRESENT 2
[Back] ['E1_I1_3D0.bmp\r\n', 'E1_I1_5D0.bmp\r\n', 'E1_I1_D0.bmp\r\n', 'E1_I1_9D0.bmp\r\n', 'E1_I1_7D0.bmp\r\n', 'E1_I2_1D0.bmp\r\n', 'E1_I1_1D0.bmp\r\n'].bmp
[Connect] 0 3
Вместо того, чтобы каждый файл имя появляется один раз, и за ним следует калибровка, я получаю все они напечатаны сразу и несколько калибровок под каждым.
Буду признателен за любую помощь в этом. Спасибо!
Сколько строк в файле ввода? Можете ли вы прочитать весь файл в памяти, не разбивая машину? – motanelu
'outfile.write ('[Назад]' + str (fileId) + '.bmp' + '\ r \ n')' change 'fileId' to' line' – Bg1850
Вы не должны указывать '' \ r \ n ' 'окончания строки. Python автоматически преобразует '' \ n'' в правильную строку, заканчивающуюся для вашей платформы, если вы не пишете в двоичном режиме (вы не являетесь). –