我在編碼我的算法的文件管理部分時遇到了問題。python中的動態文件名
我的文件管理器的目標是獲取一個源文件,然後逐行讀取它,並根據過濾器將每行分割到一個新文件中。
數據以製表符分隔\t
。
過濾器包含收集所有具有相同4rth參數的行(可以說它是對它們進行排序)。
我的問題是,我想根據參數,這是一個整數動態文件名。 所以主文件將充滿這樣的算法的一部分:
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))
我已經看過了一些解決方案,並發現這一點:之前2.6 對於Python版本,使用字符串格式化操作符%:
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()
編輯:我想我真的不好解釋了我的問題,這裏是我編寫的第一個日誌文件,任何治療前:
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()'或'%'。爲什麼這些方法不適合你? –