使用python读取csv文件并将内容存储在数组中

Posted

技术标签:

【中文标题】使用python读取csv文件并将内容存储在数组中【英文标题】:Read csv file and store content in array using python 【发布时间】:2021-11-11 10:48:37 【问题描述】:

我的 CSV 文件如下:

aa , a1, 1, bb, b1, 11, cc, c1, 111
aa2 , a2, 2, bb2, b2, 22, cc2, c2, 222
aa3 , a3, 3, bb3, b3, 33, cc3, c3, 333

我需要获取前三个内容并将其存储在数组中,例如: aa , a1, 1, bb, b1, 11, cc, c1, 111 会变成['aa a1 1', 'bb b1 11', 'cc c1 111']

这是我的代码:

import csv

with open('Test.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    rows = list(csv_reader)
    lines= len(list(rows))

    for line in range(lines):
        i=0
        j=1
        k=2

        for l in range(len(list(rows[line]))):
            t=[]
            t.append(rows[line][i]+rows[line][j]+rows[line][k])
            print(t[0:])
            i+=3
            j+=3
            k+=3

【问题讨论】:

您好!不错的代码。你的问题是什么? 请注意,如果您编写 for row in lines: 而不是 for line in range(lines):,然后将每次出现的 rows[line] 替换为简单的 row,代码可能会更易读。 我想获取像 aa, a, 1 这样的每 3 列,并将其存储为一列,直到我得到这个 ['aa a1 1', 'bb b1 11', 'cc c1 111' ] 用我的代码我得到这个错误 ['aa a1 1'] ['bb b1 11'] ['cc c1 111'] Traceback(最近一次通话最后):文件“C:\用户\kitar\Desktop\oop.py",第 18 行,在 中 t.append(rows[line][i]+rows[line][j]+rows[line][k]) IndexError: list index out范围 我得到了这个解决方案,但是对于一行,然后超出范围 【参考方案1】:

使用for-loops,通常最好直接迭代项目,例如使用for row in rows:,而不是在索引上,例如使用for line in range(lines):

另外,请注意,每次您拨打list 时,您都在构建一个新列表。这可能很浪费。例如,lines = len(list(rows)) 构建了列表rows 的不必要副本。你可以简单地写nb_lines = len(rows)

由于您想将列表分成 3 块,因此您可能有兴趣阅读以下内容:

Question: How do you split a list into evenly-sized chunks?; Documentation for more_itertools.chunked; Itertools recipe: "Collect data into fixed-length chunks or blocks"。
import csv

t = []
with open('Test.csv') as csv_file:
    for row in csv.reader(csv_file):
        t.append([' '.join(row[i:i+3]) for i in range(3)])
print(t)
# [['aa   a1  1', ' a1  1  bb', ' 1  bb  b1'],
#  ['aa2   a2  2', ' a2  2  bb2', ' 2  bb2  b2'],
#  ['aa3   a3  3', ' a3  3  bb3', ' 3  bb3  b3']]

我们可以去掉难看的多余空格,using str.strip:

import csv

t = []
with open('Test.csv') as csv_file:
    for row in csv.reader(csv_file):
        t.append([' '.join([word.strip() for word in row[i:i+3]]) for i in range(3)])
print(t)
# [['aa a1 1', 'a1 1 bb', '1 bb b1'],
#  ['aa2 a2 2', 'a2 2 bb2', '2 bb2 b2'],
#  ['aa3 a3 3', 'a3 3 bb3', '3 bb3 b3']]

【讨论】:

以上是关于使用python读取csv文件并将内容存储在数组中的主要内容,如果未能解决你的问题,请参考以下文章

Playwright & NodeJs - 读取 CSV 并将数据推送到数组

python-pandas读取mongodb读取csv文件

Python:如何读取文件并将某些列存储在数组中

CAPL读取CSV文件,像python一样简单方便

如何从 csv 文件中读取数据并将其存储在数据库中?弹簧靴

c# 中,如何读取XML文件,并将读取到的内容显示到TreeView中