gpt4 book ai didi

python - 标准输入 标准输出 python : how to reuse the same input file twice?

转载 作者:太空宇宙 更新时间:2023-11-03 18:34:01 24 4
gpt4 key购买 nike

我对 Python 很陌生,甚至对 stdin stdout 方法也很陌生。尽管如此,我需要使我的脚本可用于 UNIX 命令,以便可以使用我的脚本一次处理 2 个输入文件。该脚本与命令行参数完美配合:

newlist = []
def f1()
....
def f2(input_file):
vol_id = sys.argv[3]
for line in input_file:
if ... :
line = line.replace('abc','def')
line = line.replace('id', 'id'+vol_id)
....
newlist.append(line)
return newlist

def main():
if len(sys.argv) < 4:
print 'usage: ./myscript.py [file_in... file_out... volume_id]'
sys.exit(1)

else:

filename = sys.argv[1]
filename_out = sys.argv[2]


tree = etree.parse(filename)
extract(tree)

input_file = open(filename, 'rU')
change_class(input_file)

file_new = open(filename_out, 'w')
for x in newlist:

if '\n' in x:
x = x.replace('\n', '')
print>>file_new, x

当我尝试向其中添加 stdin stdout 时,我首先遇到了读取相同输入文件的问题,因此做了一些更改,以便它实际上只打开一次。这是我修改后的 main():

            filename = sys.argv[1]
filename_out = sys.argv[2]

if filename == '-':
filename = sys.stdin
else:
input_file = open(filename, 'rU')


if filename_out == '-':
filename_out = sys.stdout
file_new = filename_out
else:
file_new = open(filename_out, 'w')

input_file = open(filename, 'rU')
tree = etree.fromstring(input_file)
extract(tree)

change_class(input_file)

for x in newlist:

if '\n' in x:
x = x.replace('\n', '')
print>>file_new, x

然后我像这样运行我的脚本:

./myscript.py --volumeid <输入文件>输出文件

我收到此错误消息:

Traceback (most recent call last):
File "./myscript.py", line 191, in <module>
main()
File "./myscript.py", line 175, in main
input_file = open(filename, 'rU')
TypeError: coercing to Unicode: need string or buffer, file found

我做错了什么?

最佳答案

您正在尝试使用打开的文件对象作为文件名:

filename = sys.stdin

# ...

input_file = open(filename, 'rU')

无论如何,您都无法从 sys.stdin 重新读取;您需要将所有文件读入内存,然后处理两次:

if filename == '-':
input_file = sys.stdin
else:
input_file = open(filename, 'rU')

input_data = input_file.read()

tree = etree.fromstring(input_data)
extract(tree)

change_class(input_data)

您必须更改 change_class 来处理字符串,而不是打开的文件对象。

关于python - 标准输入 标准输出 python : how to reuse the same input file twice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911323/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com