如何将csv文件导入数据数组?

27

我的脚本中有一行代码,它从一个有很多空格的文本文件中导入数据到一个数组中,以备后用。

textfile = open('file.txt')
data = []
for line in textfile:
    row_data = line.strip("\n").split()
    for i, item in enumerate(row_data):
        try:
            row_data[i] = float(item)
        except ValueError:
            pass
    data.append(row_data)

我需要将这个文本文件转换为csv文件。我不想只是改变这个文本以便用逗号分隔(因为如果在引号中有一些值可能会有逗号)。幸运的是,我看到有一个csv库可以导入,它可以处理这个问题。

import csv
with open('file.csv', 'rb') as csvfile:
    ???

我该如何将csv文件加载到数据数组中?

如果有所区别,这是数据使用的方式:

row = 0
for row_data in (data):
    worksheet.write_row(row, 0, row_data)
    row += 1

1
你有两个任务:1)我需要将这个文本文件转换为CSV文件;2)我如何将CSV文件加载到数据数组中?首先发布您的初始file.txt内容。 - RomanPerekhrest
4个回答

46
假设CSV文件以逗号分隔,使用Python 3中的csv模块最简单的方法可能是:
import csv

with open('testfile.csv', newline='') as csvfile:
    data = list(csv.reader(csvfile))

print(data)

你可以在创建csv.reader时指定其他分隔符,比如制表符。如果列之间有多个空格符号,还可以在csv.reader调用中添加skipinitialspace=True
    data = list(csv.reader(csvfile, delimiter='\t'))

对于Python 2,请使用open('testfile.csv', 'rb')来打开文件。

谢谢!我有Python 2,所以我按照建议进行了修改。data =这一行是否会为csv中的每一行重复?我能否直接将数据放入worksheet.write_row(row, 0, row_data)行中,而不必先将其放入数组中,然后读取数组的每一行? - GFL
是的,看起来你问题末尾的循环可以工作(虽然你不需要在 data 周围加括号)。从 xlsxwriter.write_row() 的文档中可以发现它也可以更有效率地通过单个调用完成:即使用worksheet.write_row(row, 0, data) 而不是使用循环并进行多个每次仅执行一行的调用。 - martineau
@martineau,我正在尝试将CSV文件中的电子邮件列表导入到Python列表中。数组列表长度仅为1 len(data)=1,但是CSV文件中有100多个电子邮件。(打印显示所有电子邮件,但长度=1) 迭代时出现错误:TypeError: unhashable type: 'list' - Cappittall
@HakanC:这并没有告诉我CSV文件里面有什么,只是告诉了我csv.reader()返回了什么。请不要在评论区再发布任何问题,因为我将不会回复更多的评论。 - martineau
我知道这已经过时了,但是... 这将返回一个列表的列表... 在打印时检查列表不是列表的第一项。在这种情况下,你会看到[[a,b,c]],尝试打印data[0],你现在可能只会看到一个括号=[a,b,c]。 - NicoKowe
显示剩余4条评论

14

您可以使用pandas库或numpy读取CSV文件。如果您的文件是以制表符分隔的,则在下面的sepdelimiter参数中使用'\t'代替逗号。

import pandas as pd 
myFile = pd.read_csv('filepath', sep=',')

或者
 import numpy as np
 myFile = np.genfromtxt('filepath', delimiter=',')

3
我认为最简单的方法是使用Pandas:

我认为最简单的方法是通过Pandas来实现:

import pandas as pd
data = pd.read_csv(FILE).values

这将返回一个Numpy数组,其中包含从CSV创建的DataFrame中的值。请参阅此处的文档。


0

这个方法对我也适用。 例如:有随机数据,每个数据点都从新行开始,如下所示:

 'dog',5,2
 'cat',5,7,1
 'man',5,7,3,'banana'
 'food',5,8,9,4,'girl'

import csv
with open('filePath.csv', 'r') as readData:
readCsv = csv.reader(readData)
data = list(readCsv)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接