2013-11-23 76 views
13

我有一个python脚本,它使用一个文本文件并处理来自该文件的数据并输出到另一个文件。基本上我希望它适用于任何文本文件输入。现在我从文件中读取数据,然后将输出打印到屏幕上。我想在文件中输出。如何从终端获取python脚本的输入文件?

所以用户可以键入任何文件以下和测试:

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

如何我可以在脚本实现这一点?谢谢。

cat是linux下的命令。我不知道它是如何工作的。

+1

使用'cat foo |酒吧'是没有必要的;你总是可以做'bar abarnert

回答

26

要做到这一点,最好的办法可能是调用输入和输出文件作为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()

+0

为什么不推荐使用管道系统? (或者你的意思是说'猫富?|蟒蛇bar.py'和'蟒蛇bar.py

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

您可以通过具有内部input_file.txt而不是实际的文件中的所有数据,因此为了实现你的Python脚本一个大的字符串,只是把它作为一个字符串参数,并通过新的分裂字符串行字符,例如,你可以使用“\ n”作为分隔符来拆分大串并写入到OUTPUTFILE,只是做它以正常的方式

open filewrite to the fileclose file

+1

'在Windows中,您可以使用“\ n”作为分隔符'很具误导性。在每个现代平台上,您可以使用'\ n'作为分隔符。在Windows中,你必须使用'\ r \ N',除非你使用文本模式与通用换行,在这种情况下,利用Python可以治疗的Windows就像另一个平台。 – abarnert

+0

@abarnert你让我!更新,thx – JoeC

0

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

您打开文件的方式与阅读相同,但使用'w'模式代替'r'模式。

您通过拨打电话readreadline,以与拨打write相同的方式致函文件。

这些都在本教程的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 
+0

很酷,谢谢我得到它的工作。 –

1

这种方法(你的问题),描述了从标准输入读取数据:

cat input_file.txt | python script.py

解决方法:script.py

import sys 
for line in sys.stdin: 
    print line 

的方法,上述解决方案介绍服用参数参数与蟒蛇电话:

python script.py input_file.txt

解决方法:script.py

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

希望这会有所帮助!