Python 为什么我的string.split()函数会产生意外的结果?

Python 为什么我的string.split()函数会产生意外的结果?,python,string,python-3.x,file-io,split,Python,String,Python 3.x,File Io,Split,我有一个输入文件,包括: 1a 2a 2b 2c 2d 3a 3b 3c 3d 我的Python代码如下所示: f = open('access.txt', 'r') controls = f.read() for line in controls: s = line.split() print(s), 我希望数组的格式是['1a','2a','2b'b,…]。但我得到的是一种不同的格式,所有内容都打印两次: ['1'] ['a'] [] ['2'] ['a'] [] ['

我有一个输入文件,包括:

1a 2a 2b 2c 2d 3a 3b 3c 3d
我的Python代码如下所示:

f = open('access.txt', 'r')
controls = f.read()

for line in controls:
    s = line.split()
    print(s),
我希望数组的格式是
['1a','2a','2b'b,…]
。但我得到的是一种不同的格式,所有内容都打印两次:

['1'] ['a'] [] ['2'] ['a'] [] ['2'] ['b'] [] ['2'] ['c'] [] ['2'] ['d'] [] ['3'] ['a'] [] ['3'] ['b'] [] ['3'] ['c'] [] ['3'] ['d'] [] [] ['1'] ['a'] [] ['2'] ['a'] [] ['2'] ['b'] [] ['2'] ['c'] [] ['2'] ['d'] [] ['3'] ['a'] [] ['3'] ['b'] [] ['3'] ['c'] [] ['3'] ['d'] [] []
我似乎无法确定这两个问题


编辑:看起来我是在一个字符一个字符地迭代,我已经解决了这个问题

for循环以单个字符串的形式在整个文件内容中循环,每次循环一个字符。在读取文件时,通过执行以下操作,可以保留大部分代码:

controls = f.read().splitlines().
从那里你可以像以前一样循环

如果文件只有一行,则可以执行以下操作:

f.read().split()

如果需要行列表,请使用
readlines
而不是
read

您可以使用readlines()


因为您试图对字符串使用
for
。让我们看看:

f = open('access.txt', 'r')
controls = f.read()
现在发生了什么<代码>控件是一个字符串,因为您正在使用
f.read()

因此,在字符串上使用
for
循环会得到类似于……的结果,您可以在Python Shell中尝试


实际上,在这里您不需要
f.read()
,以下代码可以正常工作:

with open('access.txt', 'r') as f: # with can auto close the file, it's safe.    
    for line in f:
        s = line.split()
        print(s, end='')

此外,这里还有一种使用列表理解的简单方法:

你可以试试这个:

# automatically closes file when done
with open('access.txt', 'r') as f:
    for line in f.readlines():
        s = line.split()
        print(s),

这样,您就可以一行一行地循环,并将每一行单独拆分。

Hmm。不过,我需要为整个文件创建一个循环结构。那么,我如何才能开始分割线呢?那么打印双行呢?如果需要将文件按行拆分,为什么不直接调用
f.readlines()
呢?我首先假设它是一个多行文件:)事实上,
controls=splitlines().splitlines()
只是个错误:你没有对任何东西调用
splitlines()
,然后你在一个
列表中调用它。哦,你现在有一个额外的
在结尾。太好了,这很有效。我一定是像其他人提到的那样一个字符一个字符地迭代。但是打印两次的问题呢<代码>['1a','2a','2b','2c','2d','3a','3b','3c','3d']['1a','2a','2b','2c','2d','3a','3b','3c','3d']
老实说,我不确定。也许是因为这是一天的结束,但我找不到为什么它会打印两次的原因。这一定是代码的其他部分。不过,我所做的就是导入其他类。我在终端执行代码,我同意。如果所有项目都在一行上,只需使用
s=next(f).split()
就可以删除
f.read()
行,对f中的行执行
,进行双重打印:您100%确定没有运行该代码两次吗,因为你没有向我们展示它周围的代码?出于对一切的热爱,你会学会正确格式化帖子吗?
with open('access.txt', 'r') as f:
    print(*[s.split() for s in f])
# automatically closes file when done
with open('access.txt', 'r') as f:
    for line in f.readlines():
        s = line.split()
        print(s),