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),