Python 如何在readlines中拆分行并将它们保存在不同的列表中?
这是我的密码Python 如何在readlines中拆分行并将它们保存在不同的列表中?,python,split,nlp,tokenize,readlines,Python,Split,Nlp,Tokenize,Readlines,这是我的密码 with open('file.txt', 'r') as source: # Indentation polTerm = [line.strip().split()[0] for line in source.readlines()] polFreq = [int(line.strip().split()[1]) for line in source.readlines()] 这在file.txt中 anak 1 aset 3 atas 1 bangun
with open('file.txt', 'r') as source:
# Indentation
polTerm = [line.strip().split()[0] for line in source.readlines()]
polFreq = [int(line.strip().split()[1]) for line in source.readlines()]
这在file.txt中
anak 1
aset 3
atas 1
bangun 1
bank 9
benar 1
bentuk 1
我得到了我想要的术语:
['anak'、'aset'、'atas'、'bangun'、'bank'、'benar'、'bentuk']
但是对于polFreq,不是这样:
['1','3','1','1','9','1','1']
我得到的是这样的空白列表:
[]
有人知道为什么会这样吗?以及如何解决这个问题,这样我就能得到我想要的
with open('file.txt', 'r') as source:
lines = source.readlines()
polTerm = [line.strip().split()[0] for line in lines]
polFreq = [int(line.strip().split()[1]) for line in lines]
原因是readlines()
是一个迭代器,因此第一次调用已经使用了它,它变为空,当您第二次尝试使用该空迭代器时,您发现它为空
with open('file.txt','r') as source:
data=source.readlines()
a1=[]
a2=[]
for line in data:
x=line.split()
a1.append(x[0])
a2.append(x[1])
原因是,
readlines()
是一个迭代器,因此第一次调用已经使用了它,它变成了空的,当您第二次尝试使用该空迭代器时,您会发现它是空的。@carcgeniate为您提供了字面上的答案
with open('file.txt','r') as source:
data=source.readlines()
a1=[]
a2=[]
for line in data:
x=line.split()
a1.append(x[0])
a2.append(x[1])
然而,在我看来,你不应该把文件读两遍(除了文件实在太大了,而且它的所有行都无法放入内存之外)
如果文件不是那么大,就不需要在文件中读取两次。
如果它有点大,那么只需将前两列读入内存即可。
然后把它们分开
我的建议是:
with open('file.txt', 'r') as source:
cols_1_and_2 = [line.strip().split(None, 2)[:2] for line in source.readlines()]
polTerm = [cols[0] for cols in cols_1_and_2]
polFreq = [int(cols[1]) for cols in cols_1_and_2]
del cols_1_and_2 # this line is to free some memory if that would be an issue
@Carcgenicate会给你一个直截了当的答案 然而,在我看来,你不应该把文件读两遍(除了文件实在太大了,而且它的所有行都无法放入内存之外) 如果文件不是那么大,就不需要在文件中读取两次。 如果它有点大,那么只需将前两列读入内存即可。 然后把它们分开 我的建议是:
with open('file.txt', 'r') as source:
cols_1_and_2 = [line.strip().split(None, 2)[:2] for line in source.readlines()]
polTerm = [cols[0] for cols in cols_1_and_2]
polFreq = [int(cols[1]) for cols in cols_1_and_2]
del cols_1_and_2 # this line is to free some memory if that would be an issue
正如Carcigenicate所说,
.readlines
是一个返回列表的生成器。如果不将该列表保存在变量中,则第二次调用生成器将不会返回任何结果,因为在第一次调用时生成器已耗尽。您需要的是:
以open(“file.txt”,“r”)作为inf:
#现在,行列表保存在全局变量中
#可与open()一起在外部使用。
#.readlines生成器已耗尽,无法返回
#什么都行。
raw=inf.readlines()
polTerm=[line.strip().split()[0]用于原始数据中的行]
polFreq=[int(line.strip().split()[1])表示原始数据中的行]
专业提示:学习使用pandas,特别是pd.read_csv()。正如Carcigenicate所说,
。readlines
是一个返回列表的生成器。如果您不将该列表保存在变量中,第二次调用生成器将不会返回任何结果,因为在第一次调用时生成器已耗尽。您需要的是:
以open(“file.txt”,“r”)作为inf:
#现在,行列表保存在全局变量中
#可与open()一起在外部使用。
#.readlines生成器已耗尽,无法返回
#什么都行。
raw=inf.readlines()
polTerm=[line.strip().split()[0]用于原始数据中的行]
polFreq=[int(line.strip().split()[1])表示原始数据中的行]
专业提示:学习使用pandas,特别是pd.read_csv()。这能回答你的问题吗?谢谢你的回答!另一个问题,除了这个问题,还有更好的方法吗?谢谢!我只是在
lines=source.readlines()之前添加polTerm=[line.strip().split()[0]来表示source.readlines()]
并更改所有源代码。阅读行
至行
您有4个答案,似乎解决了您的问题。您仍然需要有关这些答案的一些细节的帮助或建议?这是否回答了您的问题?谢谢您的回答!另一个问题,除此之外还有更好的方法吗?谢谢!我只添加了行=源代码.readlines()
beforepolTerm=[line.strip().split()[0]用于source.readlines()中的行
并更改所有源代码。readlines
为lines
您有4个答案,似乎可以解决您的问题。您仍然需要有关这些答案的一些详细信息的帮助或建议?您可以取消最后两行的记录。它们不必位于with
语句中。这会稍微关闭文件earlier@gelonida我知道,但是这是另一个问题,一个效率问题。如果你同时回答两个问题,这可能会增加询问者的复杂性。我只是勉强修改了他的代码,以便他能够跟进并找出错误的地方。是的。我只是认为这样更容易阅读,并且更清楚地表明文件访问已经完成(该文件仅读取一次)。但在这种情况下,这当然不是很重要。您可以取消最后两行的插入。它们不必位于with
语句中。这会稍微关闭文件earlier@gelonida我知道。但这是另一个问题,一个效率问题。如果你同时回答两个问题,这可能会增加复杂性我只是勉强修改了他的代码,这样他就可以继续下去,找出哪里弄错了。是的。我只是觉得这样更容易阅读,并且更清楚地表明文件访问已经完成(文件只读取一次)。但在这种情况下,这当然不是很重要。您可以在data=
行之后立即取消缩进。这将更早地关闭文件并降低缩进级别(在我看来通常是个好主意)这是真的,谢谢你的建议,这对提高效率非常有用。你可以在data=
行之后立即取消缩进。这将更早地关闭文件并降低缩进级别(在我看来通常是个好主意)。这是真的,谢谢你的建议,这对提高效率非常有用。