Python 3.x,如何读取文件内容(进入一维列表)

时间:2017-12-22 09:44:20

标签: python arrays csv

我是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数组)而不是我想要的线性列表。 另外,我希望列表包含整数而不是字符串。

2 个答案:

答案 0 :(得分:0)

实际上,你获取列表列表,而是获取字符串列表(文件中的行),每个字符串看起来像一样。首先,你需要拆分线。您可以使用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']]

接下来,如果你想要一个包含所有行中所有数字的 flat 列表,你应该使用extend代替append,你也可以使用str来构建int {1}}到 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] 。您也可以使用列表解析在一行中完成所有这些:

SELECT
  *,
  (
    SELECT COUNT(DISTINCT client_id)
    FROM 1097_course_students_tbl
    WHERE course_cycl_id=id
      AND stts_id <> 8
      AND client_id IN(SELECT id FROM 1097_clients_tbl WHERE is_removed=0)
  ) AS cnt
FROM 1097_course_cycle_tbl
WHERE (course_id IN (SELECT id FROM 1097_courses_tbl WHERE is_removed=2))
ORDER BY start_date DESC

答案 1 :(得分:-1)

试试这个

with open("main.csv") as csvfile:
    tlines = [line.split(",", 2) for line in csvfile.readlines()]
    text = [" ".join(line) for line in tlines]
print text

它可能对你有帮助。