如何将文件列表传递给python open()方法

nas*_*sio 5 python python-2.7

我有一个大约100个文件的列表,我想阅读并匹配一个单词.这是我写的代码片段.

import re
y = 'C:\\prova.txt'
var1 = open(y, 'r')

for line in var1:
    if re.match('(.*)version(.*)', line):
        print line

var1.close() 
Run Code Online (Sandbox Code Playgroud)

每次我尝试将元组传递给y时都会出现此错误:

TypeError: coercing to Unicode: need string or buffer, tuple found.
Run Code Online (Sandbox Code Playgroud)

(我认为这open()不接受任何元组但只接受字符串)

所以我可以让它使用文件列表?

先感谢您!!!!

Mar*_*ler 6

你是完全正确的,open不接受元组并需要一个字符串.所以你必须逐个迭代文件名:

import re

for path in paths:
    with open(path) as f:
        for line in f:
            if re.match('(.*)version(.*)', line):
                print line
Run Code Online (Sandbox Code Playgroud)

在这里,我使用paths保存文件名作为变量 - 它可以是元组或列表或您可以迭代的其他对象.

  • @JohnMachin:请记住,你可以**编辑**我的答案,而不是为了这些琐碎的问题而低估它们.Stack Overflow旨在成为我们改进问题和答案的网站 - 而不是我们互相挑剔的网站. (4认同)

Mar*_*ers 5

fileinput.input而不是open.

该模块实现了一个辅助类和函数,可以通过标准输入或文件列表快速编写循环

[...]要指定备用文件名列表,请将其作为input()的第一个参数传递.也允许使用单个文件名.

例:

import fileinput

for line in fileinput.input(list_of_files):
    # etc...
Run Code Online (Sandbox Code Playgroud)

  • 是个错误.现在修复了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (3认同)