Универсальная конструкция для STDIN и Fileinput в коде Python

1

Я хочу, чтобы мой код мог принимать входные данные из файла И stdin. Какую конструкцию сделать?

Я имею в виду унифицирующую конструкцию, которая подразумевает

file1 = sys.stdin

и

file1 = fileinput.input(sys.argv[1])
Теги:

2 ответа

0
Лучший ответ

"Унифицирующая конструкция" звучит так, будто вы хотите иметь доступ к файлу, предоставленному в качестве аргумента, или sys.stdin через одну переменную, поэтому вы можете просто сказать функции, чтобы получить строку от этой вещи. К счастью, sys.stdin - это еще один объект File, поэтому у вас есть точно такая же функциональность с обоими, и это так же просто, как блок try/except:

try:
  from sys import argv
  file1 = open(argv[1])
except:
  from sys import stdin
  file1 = stdin

Вы получите sys.stdin, если argv [1] вне диапазона (IndexError) или не может быть открыт (IOError).

Если вы просто хотите объединить два, используйте file1 = sys.argv[1].open().read() + sys.stdin.read()

6
import fileinput
for line in fileinput.input():
    print line
  • 0
    This iterates over the lines of all files listed in sys.argv[1:], defaulting to sys.stdin if the list is empty. If a filename is '-', it is also replaced by sys.stdin. - docs.python.org/2/library/fileinput.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню