如何在 readlines 中拆分行并将它们保存在不同的列表中?
How to split line in readlines and save them in different list?
这是我的代码
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
我得到了我想要的 polTerm:
['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])
@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
是一个生成器,return 是一个列表。如果您不将该列表保存在变量中,则第二次调用生成器将 return 没有任何结果,因为生成器在您的第一次调用中已耗尽。你要的是这个:
with open("file.txt","r") as inf:
# Now your lines list is saved in a global variable
# which can be used outside with open().
# The .readlines generator is exhausted and won't return
# anything.
raw = inf.readlines()
polTerm = [line.strip().split()[0] for line in raw]
polFreq = [int(line.strip().split()[1]) for line in raw]
专业提示:学习使用 pandas,具体来说,pd.read_csv()。
这是我的代码
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
我得到了我想要的 polTerm:
['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])
@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
是一个生成器,return 是一个列表。如果您不将该列表保存在变量中,则第二次调用生成器将 return 没有任何结果,因为生成器在您的第一次调用中已耗尽。你要的是这个:
with open("file.txt","r") as inf:
# Now your lines list is saved in a global variable
# which can be used outside with open().
# The .readlines generator is exhausted and won't return
# anything.
raw = inf.readlines()
polTerm = [line.strip().split()[0] for line in raw]
polFreq = [int(line.strip().split()[1]) for line in raw]
专业提示:学习使用 pandas,具体来说,pd.read_csv()。