使用python将数据文件读取到数组

使用python将数据文件读取到数组,python,Python,这个问题非常简单,但我从几个小时后就没能完成:我得到了一个数据文件,它包含两列数据,由一个选项卡分隔。我想用python阅读和处理它们allData包含数据,但我如何访问部分数据 with open( "file.txt", "r" ) as mergeData: allData = mergeData.read() print allData 最灵活的方法是使用: 请注意,所有元素都将是字符串。例如,如果要将第一列转换为int,将第二列转换为float,可以执行以下操作 a

这个问题非常简单,但我从几个小时后就没能完成:我得到了一个数据文件,它包含两列数据,由一个选项卡分隔。我想用python阅读和处理它们
allData
包含数据,但我如何访问部分数据

with open( "file.txt", "r" ) as mergeData:
    allData = mergeData.read()

print allData

最灵活的方法是使用:

请注意,所有元素都将是字符串。例如,如果要将第一列转换为
int
,将第二列转换为
float
,可以执行以下操作

    allData = [(int(first), float(second)) for first,second in reader]
要将其拆分为两个浮动列表,每列一个,请使用
zip()
和元组解包操作符(
*
):

为什么不:

fp = open("file.txt","r")
mylist = fp.readlines()   # get list of lines.
fp.close()  # i forgot that line [EDIT]
for i in range(len(mylist)):
    mylist[i] = mylist[i].strip()   #get rid of ' ' and '\n' and such
    mylist[i] = mylist[i].split('separator') # splits line into list of elements in the line
mylist应该是一个二维数组/列表,其中包含行和每行中的单个元素。 然后,分隔符应与分隔行元素的字符或字符串交换。

简短:

with open( "file.txt", "r" ) as mergeData:
     allData = [line.strip().split('\t') for line in mergeData]
@TimPietzcker提到的
csv
模块很好,但不处理unicode。

该模块是读取分隔数据字段文件的好选择。下面创建一个列表列表,每个列表将包含从数据文件中相应列读取的数据。它还可以轻松地适应任意数量的数据列:

import csv

NUM_COLS = 2
columns = [[] for _ in range(NUM_COLS)]
with open("datafile.txt", "rb") as infile:
    for row in csv.reader(infile, delimiter="\t"):
        for i, col in enumerate(row):
            columns[i].append(col)

for col in columns:
    print col
示例选项卡分隔的输入文件:

15
2   6
3   7
4   8
产出:

['1','2','3','4']
['5', '6', '7', '8']

<代码>这是不起作用的(看<代码> .Studio)/Cuth>行……并且非常unpthic和低效。@提姆:是的,SRY,我现在正在编程C++,所以出现了“。”从^^。但是,如果使用变量类型列表(通常是python中的变量类型列表),那为什么会是非python的呢?它也比使用图书馆来完成这个简单的任务更基本。文件对象是可编辑的,因此可以使用它来代替
mylist
2。列表也是可编辑的,所以不需要索引3。如果在大多数情况下确实需要索引,
enumarate
即使不是更有效也更干净。它仍然是错误的(我甚至没有注意到
s)。字符串是不可变的。首先构建一个字符串列表,然后将其切分为一个字符串列表,速度非常慢,内存效率也很低。再加上@zero323列出的问题。不要忘记
split('separator')
。到目前为止,这一切都很好。根据我的理解:现在所有内容都在allData文件中。如何将数据拆分为两个浮动文件?
allData
是一个列表,而不是一个文件。你想在哪一点上拆分?当然,你是对的,这是一个列表。我想要两个列表,每个列表包含一列。@user2003965:好的,这有点复杂。查看我的编辑。我不确定,但我认为Python3
csv
模块处理Unicode。
with open( "file.txt", "r" ) as mergeData:
     allData = [line.strip().split('\t') for line in mergeData]
import csv

NUM_COLS = 2
columns = [[] for _ in range(NUM_COLS)]
with open("datafile.txt", "rb") as infile:
    for row in csv.reader(infile, delimiter="\t"):
        for i, col in enumerate(row):
            columns[i].append(col)

for col in columns:
    print col