Python:处理I / O输入

时间:2014-03-05 13:24:45

标签: python io

美好的一天:)

所以我最近在codeacademy中了解了I / O.它几乎没有教授开放,关闭,读,写等等。

我喜欢在那些编程竞赛中徘徊,网站为您提供挑战,您创建源代码,然后下载输入,最后使用输出上传源代码。 (我说的是Google Jam)

所以这就是重点。

我通常会注意到有3种输入

#
X X X X

然后我们有这种

#
XXXX

最后。

#
X
X
X
X

所以问题是

假设有三个输入文件

输入#1

3
A B C D

输入#2

3
ABCD

输入#3

3
A
B
C
D

对于每个输入,如何处理它,以便我的翻译将打印此

3
[A,B,C,D] # As you can see, the interpreter prints the ABCD as a list.

再说一句话(对不起,如果我的选择不好,我只是尽量让它变得清晰):让我们说你输入#1,你如何用python处理它,这样你就可以得到上述内容结果打印在解释器中,依此类推输入#2和输入#3

PS:如果你简短解释,我会很高兴的。 PPS:因为我只是从codeacademy了解I / O的东西,所以我希望你使用open(fileinput,“r”)来获取输入而不是import fileinput。 PPPS:非常感谢您回答这个问题。

3 个答案:

答案 0 :(得分:0)

#1

l=list(open('myfile.txt').read())
print(l)

#2

l=open('myfile.txt').read().split(' ')
print(l)

#3

l=open('myfile.txt').read().split('\n')
print(l)

解释list(s)将一个字符串中的所有字符拆分为一个字符列表。

s.split(' ')将输入分成列表,每当遇到空格时将其分解为新元素。 s.split('\n')

也是如此

如果您希望输出A B C D使用print(' '.join(l))而不是print(l)。查看文档以获取str.join

的文档

根据OP的要求,进行修改。

for i in l:
     if i.isdigit():
           print(i)
     else:
           print(i,end=' ')

答案 1 :(得分:0)

您可以通过将1传递给file.read函数()来从文件中读取一个字节/字符。所以你可以写这样的代码:

f = open("test.txt")
ch = f.read(1)              # Read the first character
number = None               # Some variable use to holding the number
l =[]                       # Some list to store letters ('A', 'B', ...)
token = ""      
while ch:                   # This will loop until ch get empty or EOF.
    if ch.isdigit() or ch.isalpha():    # If readed character is a number, or letter
        token += ch
    else:                               # We just hit a space, tab, ect..
        if token[-1].isdigit():
            number = int(token)         # OF course you can find things like '3BGFN5', that aren't  numbers. But your
                                        # files will don't have input like that, right?             
        else:
            l.append(token)
        token = ""
    # We don't care about others types of characters.
    # Just read the next.
    ch = f.read(1)

print(number)
print(l)

此代码使用的格式与您发布的格式和其他组合一样,例如,包含

的文件
3
ABC ZXY
D E F
G
H
I

将输出

3
['ABC', 'ZXY', 'D', 'E', 'F', 'G', 'H']

答案 2 :(得分:0)

好的,我将向您介绍如何将每个输入文件加载到一些有意义的表示中(根据您的要求,这是一个带有整数的变量和带有列表的变量)。

在这三种情况下,我们将打开文件并使用一段代码逐行读取:

with open('input.txt') as f:
    line = f.readline()

请注意,line变量包含整行,包括“\ n”结束符。

现在,让我们来看看每个案例。我假设我们要将存储它的数据解析为变量N(对于整数)和data列表

<强>#2

让我从第二个开始,这稍微容易一些:

with open('input.txt') as f:
    line = f.readline()
    #the first line is an integer, which we store into a variable
    N = int(line)
    line = f.readline()
    #We remove the ending "\n" character of the line
    line = line.strip('\n')
    #The string is already a list of characters
    #So it's just a matter of feeding it into a proper list:
    data = list(line)

<强>#1

with open('input.txt') as f:
    line = f.readline()
    #the first line is an integer, which we store into a variable
    N = int(line)
    line = f.readline()
    #The second line is a space-separated list
    #We remove the \n character from the end
    #and we apply "split" to split the string into a list
    #by the spaces
    data = line.strip('\n').split(" ")

<强>#3

对于这种情况,我假设您肯定回答了我的问题,整数实际上是列表中的项目数。如果没有,我会相应地改变我的答案。

with open('input.txt') as f:
    line = f.readline()
    #the first line is an integer, which we store into a variable
    N = int(line)
    #We create a list to store the data
    data = []
    #We read items line by line
    for i in range(N):
        line = f.readline()
        line = line.strip('\n')
        #We store the data item
        data.append(line)