如何从终端获取python脚本的输入文件?

时间:2013-11-23 02:34:19

标签: python

我有一个python脚本,它使用文本文件并操纵文件中的数据并输出到另一个文件。基本上我希望它适用于任何文本文件输入。现在我从文件中读取,然后将输出打印到屏幕。我希望输出文件。

因此,用户可以输入以下内容并测试任何文件:

cat input_file.txt | python script.py > output_file.txt.

如何在我的脚本中实现这一点?谢谢。

cat是linux中的命令。我不知道它是如何运作的。

5 个答案:

答案 0 :(得分:30)

最好的方法是将输入和输出文件作为python脚本的参数调用:

import sys
inFile = sys.argv[1]
outFile = sys.argv[2]

然后,您可以读入所有数据,进行操作并写出结果:

with open(inFile,'r') as i:
    lines = i.readlines()

processedLines = manipulateData(lines)

with open(outFile,'w') as o:
    for line in processedLines:
        o.write(line)

您可以通过运行python script.py input_file.txt output_file.txt

来调用此程序

如果你绝对必须将数据传递给python(实际上不推荐),请使用sys.stdin.readlines()

答案 1 :(得分:3)

cat input_file.txt | python script.py > output_file.txt.

您可以传递一个包含input_file.txt中所有数据的大字符串而不是实际文件,因此为了实现您的python脚本,只需将其作为字符串参数并按新行字符拆分,例如,您可以使用“\ n”作为分隔符来分割该大字符串并写入输出文件,只需按正常方式执行

即。 open filewrite to the fileclose file

答案 2 :(得分:2)

此方法(您的问题)描述了从STDIN读取数据:

cat input_file.txt | python script.py

解决方案:script.py

import sys
for line in sys.stdin:
    print line

上述解决方案中的方法描述了使用python调用获取参数参数:

python script.py input_file.txt

解决方案:script.py

import sys
with open(sys.argv[1], 'r') as file:
    for line in file:
        print line

希望这有帮助!

答案 3 :(得分:0)

将输出发送到文件与从文件中输入非常相似。

您使用与阅读相同的方式打开文件,但使用'w'模式而非'r'模式除外。

您可以通过调用writeread来阅读与readline相同的方式来写入文件。

本教程的Reading and Writing Files部分对此进行了解释。

因此,如果您现有的代码如下所示:

with open('input.txt', 'r') as f:
    while True:
        line = f.readline()
        if not line:
            break
        print(line)

你只需要这样做:

with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout:
    while True:
        line = fin.readline()
        if not line:
            break
        fout.write(line)

如果您希望允许用户在命令行上传递文件名,请使用sys.argv获取文件名,或使用argparse进行更复杂的命令行参数解析。

例如,您可以将第一行更改为:

import sys
with open(sys.argv[1], 'r') as fin, open(sys.argv[2], 'w') as fout:

现在,您可以像这样运行程序:

python script.py input_file.txt outputfile.txt

答案 4 :(得分:0)

cat input_file.txt | python script.py > output_file.txt

基本上,python脚本需要读取输入文件并写入标准输出。

import sys
with open('input_file.txt', 'r') as f:
    while True:
        line = f.readline()
        if not line:
            break
        sys.stdout.write(line)