我已经构建了一个脚本,它将文件名作为参数,并提取与特定模式匹配的所有行。问题是我无法打开文件名-我一直得到:
"TypeError: coercing to unicode: need string or buffer"
它在抱怨线路info = open(name, 'r')
。
代码如下:
import re
import sys
print sys.argv[1:]
keyword = 'queued='
pattern = re.compile(keyword)
name = sys.argv[1:]
inf = open(name, 'r')
outf = open("test.txt", 'w')
for line in inf:
if pattern.search(line):
outf.write(line)
我称之为
`extract.py trunc.log`
你知道我做错了什么吗?
sys.argv[1:]
是一个列表,而不是一个字符串。当你对一个列表进行切片时,你会得到一个列表——即使切片中只有一个元素。你需要给open
一个字符串。也许你想要sys.argv[-1]
(最后一个元素)?顺便说一下,python标准库提供了命令行解析选项——其中一个是python2.7中引入的优秀的^{} 模块,但可以在较旧的python版本上非常轻松地安装(我经常与python2.6一起使用)。
这:
使
name
成为除第一个参数外的所有参数的列表。你的意思是:对于实际使用,您可能需要查看argparse。
sys.argv
返回命令行参数的列表。您可能希望在此列表的每个元素上循环(但第一个元素除外):注意,我们首先打开
test.txt
(输出文件),然后尝试打开作为脚本参数传递的每个文件。您可能想在open(name,'r')
周围抛出一个try... except
,以防万一(文件无法打开)。相关问题 更多 >
编程相关推荐