У меня возникла проблема с кодированием части управления файлами моего алгоритма.динамическое имя файла в python
Целью моего файлового менеджера является получение исходного файла, затем его чтение по строке и разбиение каждой строки в новом файле в соответствии с фильтрами.
Данные разделены таблицей \t
.
Фильтр состоит из сбора всех линий с одинаковыми 4-го параметра (вы можете сказать, что он их заказывает).
Моя проблема заключается в том, что я хочу иметь динамические имена файлов в соответствии с этими параметрами, которые являются целыми числами. Таким образом, основной файл будет заполнен частью алгоритма, как это:
Logfile.write("%s\t %s\t %s\t %s\t %s\t %s\n" % (count, BSid, UEid, nbr_RB, Metric,))
nbr_RB
будет мои параметрами фильтра, это случайный набор целого числа в диапазоне от 1 до 100.
что я нужно сделать, это автоматизировать этот код:
open('/usr/local/resultat/file_1', 'w') # here 1 is linked to the nbr_RB[i]
open('/usr/local/resultat/file_2', 'w')
.
.
.
open('/usr/local/resultat/file_nbr_RB[i]', 'w')
поэтому каждый раз будет иметь nbr_RB[i]
в имени файла, я не пишу 100 строк.
И когда я буду применять фильтр:
ligne = Logfile.split(“\n”)
par = ligne.split(“\t”)
if par [3] = nbr_RB[1]:
file_nbrRB[1].write (“%s \n” % (ligne))
elif par [3] = nbr_RB[4]:
file_nbrRB[4].write (“%s \n” % (ligne))
.
.
.
elif par [3] = nbr_RB[i]:
file_nbrRB[i].write (“%s \n” % (ligne))
Я смотрел какое-то решение и нашел это: Для версий Python до 2.6, используйте оператор строки форматирования%:
filename = "ME%d.txt" % i
Для 2.6 и более поздних версий используйте метод str.format():
filename = "ME{0}.txt".format(i)
Хотя первый пример все еще работает в версии 2.6, второй предпочтительнее. Если у вас есть более чем 10 файлов назвать этот путь, вы можете захотеть добавить ведущие нули, так что файлы отсортированы правильно в каталогах:
filename = "ME%02d.txt" % i
filename = "ME{0:02d}.txt".format(i)
Это даст имена файлов, как ME00.txt к ME99. текст. Для большего количества цифр замените 2 в примерах более высоким числом (например, ME {0: 03d} .txt). А:
import os, sys
path = "c:/temp"
for filename in ["chas.txt", "dave.txt"]:
f = open (os.path.join (path, filename))
print filename
print f.read()
print
f.close()
Edit: Я думаю, что я очень плохо объяснил свою проблему, вот что я закодирован для первого файла журнала, перед любой обработкой:
logfile= open('/usr/local/Python-3.3.0/my_tests/fichier_log/logfile_%s_%s.txt' %c %z , 'a')
и вот ошибка:
Traceback (most recent call last):
File "/usr/local/Python-3.3.0/my_tests/log_files.py", line 181, in <module>
main()
File "/usr/local/Python-3.3.0/my_tests/log_files.py", line 167, in main
logfile= open('/usr/local/Python-3.3.0/my_tests/fichier_log/logfile_%s_%s.txt' %c %z , 'a')
TypeError: not enough arguments for format string
В чем вопрос? – XORcist
Я хочу знать, как я могу назвать имя файла динамическим, поэтому он изменится в соответствии с nbr_RB [i], который является целым числом, как я объяснил. это будет ошибка, если я положу код, как я написал его здесь. – metalticket
Я, честно говоря, не могу сказать, с чем вы столкнулись. Вы, кажется, подразумеваете, что не знаете, как вычислить имя файла во время выполнения, но позже в сообщении вы покажете, как использовать '.format()' или '%'. Почему эти методы не работают на вас? –