Как удалить кавычки из данных, прочитанных из файла .csv? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь прочитать несколько .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 библиотека для работы матрицы).

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

В вашем коде line - это уже список строк - без кавычек.Чтобы получить матрицу строк чисел, напишите:

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

и все готово.

0 голосов
/ 14 февраля 2019

Ваши значения не содержат кавычек.Здесь кавычки - это просто разделители строк, которые указывают, что значения являются строками.

Если вам нужны числа, вам нужно привести значения к нужному типу, например, если все ваши значения являются целыми числами, вы можете привести ихзначения с использованием 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)
0 голосов
/ 14 февраля 2019

Можете ли вы попробовать следующее:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...