我有一个python脚本,它使用文本文件并操纵文件中的数据并输出到另一个文件。基本上我希望它适用于任何文本文件输入。现在我从文件中读取,然后将输出打印到屏幕。我希望输出文件。
因此,用户可以输入以下内容并测试任何文件:
cat input_file.txt | python script.py > output_file.txt.
如何在我的脚本中实现这一点?谢谢。
cat是linux中的命令。我不知道它是如何运作的。
答案 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 file
,write to the file
和close 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'
模式除外。
您可以通过调用write
或read
来阅读与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)