【问题标题】:How to import a csv-file into a data array?如何将 csv 文件导入数据数组?
【发布时间】:2018-03-18 18:41:30
【问题描述】:

我在一个脚本中有一行代码,它从一个文本文件中导入数据,值之间有很多空格,以供以后使用。

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

【问题讨论】:

  • 你有 2 个任务: 1) 我需要将它从一个文本文件更改为一个 csv 文件; 2) 如何将 csv 文件加载到数据数组中?从发布您的初始file.txt 内容开始

标签: python csv python-2.x


【解决方案1】:

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

import csv

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

print(data)

您可以通过在创建csv.reader时指定其他分隔符,例如制表符:

    data = list(csv.reader(csvfile, delimiter='\t'))

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

【讨论】:

  • 谢谢!我有 Python 2,所以我按照建议对其进行了修改。 data = 行是否为 csv 中的每一行重复自身?我是否可以将数据直接放入worksheet.write_row(row, 0, row_data) 行,而不是先将其放入数组中,然后读取数组的每一行?
  • 是的,看起来您问题末尾的循环会起作用(尽管您不需要 data 周围的括号)。从xlsxwriter.write_row() 文档看来,它似乎也可以在一次调用中更有效地完成:即worksheet.write_row(row, 0, data),而不是使用循环并进行多次调用,每次调用一次。
  • @martineau,我正在尝试将 CSV 文件中的电子邮件列表导入 python 列表。数组列表长度仅为 1 `len(data)=1`,但我在 CSV 文件中有超过 100 封电子邮件。 (打印显示所有电子邮件,但长度=1)迭代时出错:TypeError: unhashable type: 'list'
  • @HakanC:从TypeError 看来,您可能没有将打开的文件对象传递给csv.reader()——但没有更多信息并且无法查看您的代码,我只能猜测.发布问题。
  • 我在 excel 中有一个电子邮件列表。我想使用这个列表。首先,我转换为 CSV 文件,用逗号分隔。但是上面的代码data = list(csv.reader(csvfile)) 和 len(data) = 1 和 print(data) 是['info@z.com','y@-y.com.','...']
【解决方案2】:

您可以使用 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:

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

    这将从 CSV 创建的 DataFrame 中返回一个 Numpy 值数组。请参阅文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2012-06-16
      • 2021-11-22
      • 2021-10-20
      • 2016-12-30
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多