我正在学习文件输入/输出,我想知道如何打开具有类似名称的多个文件。例如hw-data-01,hw-data-02 ..... hw-data-99,我需要打开这些文件并对它们进行处理,但我根本无法打开它们。这是我尝试过的,
i = 00
while i < 100 :
f = open("hw09-data-%d.csv", "r") % i
for line in f :
print line
i = i + 1
问题是当我点击运行以查看是否所有文件都被读取和打印时,它表示无法找到该目录。我很确定它因为00 + 1 = 1而不是01,这是文件的存储方式。我真的不知道该怎么做,我听到我的老师在谈论glob module
,但他做了一个非常简短的例子,我不知道如何在这里应用它。任何帮助将不胜感激
答案 0 :(得分:4)
此代码有两个问题:
open("hw09-data-%d.csv", "r") % i
首先,您尝试将字符串格式化运算符%
应用于open()
返回的文件对象。你的意思是将它应用于文件名字符串:
open("hw09-data-%d.csv" % i, "r")
其次,你提到了两位数的文件名,比如hw-data-01
。 "%d" % 1
会返回"1"
,而不是"01"
。要解决此问题,您需要指定一个两位数,零填充格式,"%02d"
open("hw09-data-%02d.csv" % i, "r")
补充说明/批评:
i = 00
您可能已经尝试修复以前的错误。但这并没有以这种方式完成任何事情。实际上,如果它不为零,这可能会产生误导,因为以前导零开头的数字以八进制解释。例如0777
实际上是十进制数511。
这是Python,而不是C!像Python大师一样迭代:
for i in xrange(10):
with open("hw09-data-%02d.csv" % i, "r") as f:
for line in f :
print line
答案 1 :(得分:2)
glob module非常方便,我建议您阅读并使用它来学习如何使用它。这是一个优秀程序员,能够阅读文档并应用新材料的重要组成部分。
既然你提到老师我认为这是家庭作业,所以我不会给你答案。但是,这是一个简单的例子:
>>> import glob
>>> myfiles = glob.glob('2013-07-*.TCX')
>>> myfiles
['2013-07-27-090736.TCX', '2013-07-28-120243.TCX', '2013-07-28-123000.TCX', '2013-07-29-134417.TCX', '2013-07-29-141027.TCX', '2013-07-30-112848.TCX', '2013-07-30-115900.TCX', '2013-07-30-131222.TCX']
Glob使用模式匹配来获取与您发送的字符串匹配的所有文件。在这种情况下,我有一个带有日期文件的目录,我想要一个2013年7月所有文件的列表.Glob将获取以“2013-07-”开头的每个文件名,以“.TCX”结尾,并且(基本上)介于两者之间。如果您的文件没有如此整齐地标记,您可能需要一个更高级/更具体的模式,但这是基本的想法。祝你好运!
答案 2 :(得分:-1)
如果您希望文件名为00,01,... 09,10,11,... 99,您可以试试这个:
i = 00
while i < 10 :
if i<10 :
f = open("hw09-data-0{0}.csv".format(i))
else :
f = open("hw09-data-{0}.csv".format(i))
for line in f :
print line
i = i + 1