如何在Python中将文件作为输入流

时间:2015-03-01 18:54:13

标签: python

我有这段代码:

t=int(input())
for i in range(t):
    n,k=map(int, raw_input().split())
    A=map(int, raw_input().split())
    B=map(int, raw_input().split())
    A.sort()
    B.sort(reverse=True)
    flag=True
    while(i<len(A)):
        if A[i]+B[i]<k:
            flag=False
            break
        i+=1
    if flag==True:
        print "YES"
    else:
        print "NO"

我想提供一个文本文件,其中包含以下专门格式化的数据,以便为这样的程序提供输入。我该怎么办? 这是文字:

10
8 91
18 73 55 59 37 13 1 33
81 11 77 49 65 26 29 49
18 94
84 2 50 51 19 58 12 90 81 68 54 73 81 31 79 85 39 2
53 102 40 17 33 92 18 79 66 23 84 25 38 43 27 55 8 19
8 88
66 66 32 75 77 34 23 35
61 17 52 20 48 11 50 5
14 45
11 16 43 5 25 22 19 32 10 26 2 42 16 1
33 1 1 20 26 7 17 39 23 34 10 11 38 20
11 59
15 16 44 58 5 10 16 9 4 20 24
37 45 41 46 8 23 59 57 51 44 59
8 32
28 14 24 25 2 20 1 26
4 3 1 11 25 22 2 4
6 57
1 7 42 26 45 14
37 49 42 26 4 11
4 88
25 60 49 4
65 46 85 34
16 9
2 1 1 4 1 7 3 4 3 7 3 1 3 5 6 7
1 1 1 1 4 1 2 1 7 1 1 1 1 1 1 2
1 70
40
38

为了将包含这些数字的txt文件作为上述程序的输入流,我该怎么办?

3 个答案:

答案 0 :(得分:2)

您可以将内容作为stdin流传递,也可以作为参数从命令行传递,然后打开文件并读取它。假设您的程序名为script.py

# this will read from the stdin
import sys
for line in sys.stdin:
   print(line)

您可以将其与cat file | python script.py

一起使用
if __name__ == '__main__':
     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument('inputfile')
     args = parser.parse()
     with open(args.inputfile) as handler:
         for line in handler:
             print(line)

此选项为python script.py file

答案 1 :(得分:2)

您可以将sys.stdin设置为您想要的任何类似文件的对象。 input函数将使用存储在那里的任何对象来获取输入。在这里,我使用BytesIO对象来使用字符串进行输入。

import io
import sys

data = b"""1
8 91
18 73 55 59 37 13 1 33
81 11 77 49 65 26 29 49"""

try:
    with io.BytesIO(data) as sys.stdin:
        # your code here
        i = raw_input() # or input if python 3
        print("i = {!r}".format(i))
        assert i == "1"

finally:
    # restore original standard input
    sys.stdin = sys.__stdin__

答案 2 :(得分:1)

以“沙丘”答案为基础,您需要做的是:

with open('file_path.txt','r') as sys.stdin:
        t = int(input())