Как взять входной файл из терминала для python script?
У меня есть python script, который использует текстовый файл и управляет данными из файла и выводит их в другой файл. В основном я хочу, чтобы он работал для ввода любого текстового файла. Прямо сейчас я читаю строку из файла, а затем печатаю вывод на экран. Я хочу, чтобы результат был в файле.
Таким образом, пользователь может ввести следующее и проверить для любого файла:
cat input_file.txt | python script.py > output_file.txt.
Как я могу реализовать это в своем script? Спасибо.
cat - команда в linux. Я не знаю, как это работает.
Ответы
Ответ 1
Лучший способ сделать это - это, вероятно, вызвать входные и выходные файлы в качестве аргументов для python script:
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()
Ответ 2
cat input_file.txt | python script.py > output_file.txt.
Вы можете передать большую строку, содержащую все данные внутри input_file.txt вместо фактического файла, поэтому для реализации вашего python script просто возьмите это как строковый аргумент и разделите строки на новые строковые символы, например, вы можете использовать "\n" в качестве разделителя для разделения этой большой строки и записи в выходной файл, просто сделайте это обычным способом.
то есть. open file
, write to the file
и close file
Ответ 3
Этот метод (ваш вопрос) описывает чтение данных из 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
Надеюсь, это поможет!
Ответ 4
Отправка вывода в файл очень похожа на ввод данных из файла.
Вы открываете файл для записи так же, как и для чтения, за исключением режима 'w'
вместо режима 'r'
.
Вы пишете файл, вызывая write
на нем так же, как вы читаете, вызывая read
или readline
.
Все это объясняется в разделе Чтение и запись файлов в учебнике.
Итак, если ваш существующий код выглядит следующим образом:
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