python中的动态文件名

python中的动态文件名,python,ubuntu,python-idle,Python,Ubuntu,Python Idle,我在编码算法中的文件管理部分时遇到了一个问题 我的文件管理器的目标是获取一个源文件,然后逐行读取它,并根据过滤器将每一行拆分为一个新文件 数据用表格\t分隔 过滤器包括收集具有相同4rth参数的所有行(可以说它正在对它们进行排序) 我的问题是,我想根据参数设置动态文件名,这是一个整数。 因此,主文件将填充算法的一部分,如下所示: Logfile.write("%s\t %s\t %s\t %s\t %s\t %s\n" % (count, BSid, UEid, nbr_RB, Metric,)

我在编码算法中的文件管理部分时遇到了一个问题

我的文件管理器的目标是获取一个源文件,然后逐行读取它,并根据过滤器将每一行拆分为一个新文件

数据用表格
\t
分隔

过滤器包括收集具有相同4rth参数的所有行(可以说它正在对它们进行排序)

我的问题是,我想根据参数设置动态文件名,这是一个整数。 因此,主文件将填充算法的一部分,如下所示:

Logfile.write("%s\t %s\t %s\t %s\t %s\t %s\n" % (count, BSid, UEid, nbr_RB, Metric,))
nbr\u 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\u 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()方法:

虽然第一个示例在2.6中仍然有效,但第二个示例是首选的。 如果要以这种方式命名的文件超过10个,则可能需要添加前导零,以便在目录列表中正确排列文件:

filename = "ME%02d.txt" % i
filename = "ME{0:02d}.txt".format(i)
这将产生像ME00.txt到ME99.txt这样的文件名。对于更多数字,请用更高的数字替换示例中的2(例如,ME{0:03d}.txt)。 以及:

编辑:我想我真的很糟糕地解释了我的问题,以下是我在进行任何处理之前为第一个日志文件编写的代码:

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
回溯(最近一次呼叫最后一次):
文件“/usr/local/Python-3.3.0/my_tests/log_files.py”,第181行,在
main()
文件“/usr/local/Python-3.3.0/my_tests/log_files.py”,主目录第167行
logfile=open('/usr/local/Python-3.3.0/my_tests/fichier_log/logfile_%s_%s.txt“%c%z,'a')
TypeError:格式字符串的参数不足

看看这一行:

logfile= open('/long/path/fichier_log/logfile_%s_%s.txt' %c %z , 'a')
问题是不能先替换一个,然后替换另一个格式参数。您需要一次将格式字符串的所有参数作为元组传递:

logfile= open('/long/path/fichier_log/logfile_%s_%s.txt' % (c, z), 'a')

还可以看看这个:

ligne = Logfile.split(“\n”)
par = ligne.split(“\t”)
file_nbrRB[1].write (“%s \n” % (ligne))
您正在将所有行作为列表传递给格式字符串,这可能不是您想要做的。而且,
ligne.split
将不起作用,因为
ligne
是一个列表。 最后,假设
Logfile
文件
,您可能需要执行
Logfile.read().split('\n')
Logfile.read().splitlines()
Logfile.readlines()
。试试这个:

for ligne in Logfile.readlines():
    par = ligne.split(“\t”)
    if par [3] = nbr_RB[1]:
        file_nbrRB[1].write (“%s \n” % (ligne))
    ...

我想知道如何使文件的命名成为动态的,因此它将根据nbr_RB[i]而改变,正如我所解释的,它是一个整数。如果我把代码像我在这里写的那样放在这里,就会出错。我真的说不出你有什么问题。您似乎暗示您不知道如何在运行时计算文件名,但在后面的文章中,您将演示如何使用
.format()
%
。为什么这些方法对你不起作用?然后编辑你的帖子并添加带有完整stacktrace的错误。我试过了。我真的试过了,但是我不能…解决方案的第一部分帮助了我,谢谢。我是第二部分的钢铁股。
ligne = Logfile.split(“\n”)
par = ligne.split(“\t”)
file_nbrRB[1].write (“%s \n” % (ligne))
for ligne in Logfile.readlines():
    par = ligne.split(“\t”)
    if par [3] = nbr_RB[1]:
        file_nbrRB[1].write (“%s \n” % (ligne))
    ...