打开并处理多个文件

时间:2013-11-03 05:33:33

标签: python

我正在学习文件输入/输出,我想知道如何打开具有类似名称的多个文件。例如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,但他做了一个非常简短的例子,我不知道如何在这里应用它。任何帮助将不胜感激

3 个答案:

答案 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