2012-12-04 63 views
1

所以,我有这个文件有数据设置是这样的:Python 3:从.txt文件中提取数据?

Bob 5 60 
Carl 7 80 
Rick 8 100 
Santiago 7 30 

我需要每一部分分成三个不同的列表。一个用于名称,一个用于第一个号码,另一个用于第二个号码。

但我真的不明白,我究竟如何提取这些部分?另外,假设我想用第一行创建一个元组,并将每个不同的部分(名称,第一个数字和第二个数字)组合成一个元组?

我只是不明白我如何提取信息。 我刚刚学会了如何读取和写入文本文件...所以我很无能。

编辑:作为一个说明,文本文件已经存在。我正在处理的程序需要读取文本文件,该文件的数据以我列出的方式格式化。

+0

也许你想使用空格字符分割的字符串? – BorrajaX

回答

5

您可以分割的空白每行:

with open(yourfile) as f: 
    rows = [l.split() for l in f] 

names, firstnums, secondnums = zip(*rows) 

zip(*iterable)重新排列3列到3所列出。

0

Pickle模块不是理想的吗? Pickle赋予Python功能来加载和保存需要在Python中“可用”的东西,所以pickle不用从文本文件中导入字符串并解析它,而是可以加载它并为您提供实际的容器跟...共事。

例如:

import pickle 

myList = ["Bob", 1, 2] 
listToBeSaved = pickle.dumps(myList) # write this data to your save file 
#insert code where you work with the file and save it 
#.........  
#upon needing to open and work with this file 
listToBeLoaded = open(fileYouWroteTo) 
listTranslated = pickle.loads(listToBeLoaded) # turns the loaded data back into a proper list 
+0

我不认为泡菜在这里特别适合。 OP已经有特定格式的数据,腌菜不会读取。 –

+0

我建议pickle b/c是zip()的例子,虽然只是将数据移动到一系列元组中,但也只是吐出一堆字符串,就像open(yourfile)一样。如果OP想要使用(显然)与名称相关的值,现在他们正在编写更多代码来将字符串转换为整数。如果这与他们的项目无关,并且他们不关心他们能够保存/加载Python容器(或者他们正在使用的数据绝对必须采用这种格式,对此没有任何疑问),那么没有什么大不了的。 – 2012-12-05 07:28:31

+0

我的问题是我已经有一个文本文件,我需要从中获取信息。我需要它能够接受任何文件,如果它的格式与OP一样,并且基本上读取它。我无法手动创建列表。 >< – Ikiro