我是python和自学的新手。我正在尝试从包含整数的.csv
文件中读取数据到一维数组(python列表)。
.csv
文件如下所示:
"1","2","3","4","5","6","7","8"
"9","10","11","12","13","14","15","16"
.
.
.
我试过这样的:
l = []
f = open('file.csv', 'r')
for line in f:
l.append(line)
f.close()
我得到一个'列表列表'(2D数组)而不是我想要的线性列表。另外,我希望列表包含整数而不是字符串。
实际上,您没有获得列表列表,而是获取字符串列表(文件中的行),每个字符串看起来像一个列表。首先,你需要拆分线。您可以使用line.split(",")
执行此操作,但由于您有CSV文件,因此您应该只使用csv
模块。这也将照顾你删除"..."
。
import csv
with open('test.csv') as f:
r = csv.reader(f)
lst = []
for line in r:
lst.append(line)
现在,我们有一个实际的列表列表:[['1', '2', '3', '4', '5', '6', '7', '8'], ['9', '10', '11', '12', '13', '14', '15', '16']]
接下来,如果你想要一个包含所有行中所有数字的平面列表,你应该使用extend
而不是append
,你也可以将这些str
转换为int
:
for line in r:
lst.extend(map(int, line))
这给你[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
。您还可以使用列表推导在一行中完成所有这些操作:
lst = [int(s) for line in r for s in line]
试试这个
with open("main.csv") as csvfile:
tlines = [line.split(",", 2) for line in csvfile.readlines()]
text = [" ".join(line) for line in tlines]
print text
它可能对你有帮助。