Подтвердить что ты не робот

Как взять входной файл из терминала для python script?

У меня есть python script, который использует текстовый файл и управляет данными из файла и выводит их в другой файл. В основном я хочу, чтобы он работал для ввода любого текстового файла. Прямо сейчас я читаю строку из файла, а затем печатаю вывод на экран. Я хочу, чтобы результат был в файле.

Таким образом, пользователь может ввести следующее и проверить для любого файла:

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

Как я могу реализовать это в своем script? Спасибо.

cat - команда в linux. Я не знаю, как это работает.

4b9b3361

Ответ 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