【问题标题】:How to delete quotes from data read from .csv file?如何删除从 .csv 文件读取的数据中的引号?
【发布时间】:2019-07-08 10:29:46
【问题描述】:

我正在尝试使用以下代码从目录中读取多个.csv 文件,然后将输出结果的每一行存储为矩阵的一行:

import os, fnmatch
import csv
listOfFiles = os.listdir('C:/Users/m/Desktop/csv_files')  
pattern = "*.csv"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        with open(entry, newline='') as csvfile:
            spamreader = csv.reader(csvfile)
            for line in spamreader:
                print(line)

上面代码的输出是这样的:

['DATE', 'OPEN', 'HIGH', 'LOW', 'CLOSE', 'PRICE', 'YCLOSE', 'VOL', 'TICKS']
['13950309', '1000000.00', '1000000', '1000000', '1000000.00', '1000000.00', '1000000', '2100000', '74']
['13950326', '1050000.00', '1050010', '1050000', '1050001.00', '1050000.00', '1000000', '1648', '5']
['13950329', '1030200.00', '1060000', '1030200', '1044474.00', '1042265.00', '1050001', '28469', '108']

但我喜欢从数据中删除引号并有这样的行:

[13971116, 1020002.00, 1020002, 1020000, 1020001.00, 1020000.00, 1020002, 107, 4]

并将它们存储为矩阵的行。我该怎么做?(我有numpy 用于矩阵工作的库)。

【问题讨论】:

  • line 中没有引号。您看到引号是因为您将 python 列表 (line) 转储到输出。使用print(line[0]),您会看到它只是数字。
  • 我像你说的那样更改了代码,但结果是每行一个数字,并破坏了我在帖子中复制的结构。
  • 啊,我明白了,这与引号无关,但您确实想将字符串转换为数字。检查我的答案。

标签: python file csv import


【解决方案1】:

您可以尝试以下方法吗:

import os, fnmatch
import csv
listOfFiles = os.listdir('C:/Users/m/Desktop/csv_files')  
pattern = "*.csv"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        with open(entry, newline='') as csvfile:
            spamreader = csv.reader(csvfile)
            for line in spamreader:
                try:
                    print(list(map(float, line)))
                except:
                    print(line)

【讨论】:

  • 对不起,我忘了说我的.csv 文件的第一行是这一行:DATE OPEN HIGH LOW CLOSE PRICE YCLOSE VOL TICKS。如何跳过阅读这行文件?因为它在尝试您的代码时给了我“语法错误:无法分配给操作员”错误。
  • 我已经修改了解决方案,你现在可以查看
  • 谢谢,现在可以了。您可以帮我将读取的数据作为矩阵保存到numpy 数组吗?我也不需要第一行 cvs 文件(字符串)
  • 我会推荐你​​使用一个名为pandas的库,它会为你节省很多时间。甚至CSV的读、写、分析等一切都可以使用pandas库完成
  • 我也有,但我不熟悉 python,只是将它用于 ML 目的。所以我从某人那里得到了上面的代码!如果您可以将代码更改为熊猫版本。我需要的是读取一个 .csv 文件,并将其保存为 numpy.array ,就像一个矩阵一样来处理它。我也不需要第一行(字符串)。
【解决方案2】:

在您的代码中,line 已经是一个字符串列表——没有引号。要获得由数字行组成的矩阵,请编写:

with open(entry, newline='') as csvfile:
    spamreader = csv.reader(csvfile)
    data_matrix = list([ float(n) for n in row ] for row in spamreader)

你就完成了。

【讨论】:

  • 对不起,我忘了说我的 .csv 文件的第一行是这一行: DATE OPEN HIGH LOW CLOSE PRICE YCLOSE VOL TICKS 。如何跳过阅读这行文件?因为当我尝试您的代码时,它给了我“ValueError:无法将字符串转换为浮点数:'DATE'”错误。
【解决方案3】:

您的值不包含引号。 这里的引号只是字符串分隔符,表示值是字符串。

如果您需要数字,则需要将值转换为所需的类型,例如,如果您的所有值都是整数,您可以使用 int(value)

转换值

您的代码将是:

import os, fnmatch
import csv
listOfFiles = os.listdir('C:/Users/m/Desktop/csv_files')  
pattern = "*.csv"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
        with open(entry, newline='') as csvfile:
            spamreader = csv.reader(csvfile)
            for line in spamreader:
                print(line)
                # create a new list casting all line values to integers
                line_ints = [int(val) for val in line]
                print(line_ints)

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 2014-02-24
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    相关资源
    最近更新 更多