读取6个无头CSV文件的更好方法

2024-04-24 00:58:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个很好的方法来存储6个类似的csv文件中的所有变量,没有标题。我的代码现在看起来像这样

我可以存储为一个列表,如果它是一个CSV,但我有5个以上,什么类型的变量,我可以选择这个问题

注意:我只需要CSV文件中的26列,其中有257列

import csv

Date = []
Serial_No = []
Range = []
Size = []
RPM = []

#...
#20 more lines like this

CW_Stall_Current_A = []

with open("sample.csv",'r') as csv_file:
    csv_reader=csv.reader(csv_file,delimiter=',')
    for lines in csv_reader:
        Date.append(lines[0])
        Serial_No.append(lines[1])
        Range.append(lines[5])
        Size.append(lines[6])
        RPM.append(lines[13])
        #...    
        #20 more lines like this
        CW_Stall_Current_A.append(lines[147])

Tags: 文件csvnosizedatemoreserialrange
2条回答

如果工作内存大小允许,您的解决方案很简单

只需将当前工作放在缩进中,并指定要使用变量打开的文件名

您可以列出6个文件名并按顺序调用它们

代码如下所示:

import csv

Date = []
Serial_No = []
Range = []
Size = []
RPM = []

#...
#20 more lines like this

CW_Stall_Current_A = []

data_files = ['sample.csv','sample2.csv','sample3.csv','sample4.csv','sample5.csv','sample6.csv']

for filename in data_files:
    with open(filename,'r') as csv_file:
        csv_reader=csv.reader(csv_file,delimiter=',')
        for lines in csv_reader:
            Date.append(lines[0])
            Serial_No.append(lines[1])
            Range.append(lines[5])
            Size.append(lines[6])
            RPM.append(lines[13])
            #...    
            #20 more lines like this
            CW_Stall_Current_A.append(lines[147])

## Do something with the whole data

或者,如果您想单独处理每个文件,可以将变量列表的初始化放在一个循环中

代码如下所示:

import csv

data_files = ['sample.csv','sample2.csv','sample3.csv','sample4.csv','sample5.csv','sample6.csv']
    
for filename in data_files:  

    Date = []
    Serial_No = []
    Range = []
    Size = []
    RPM = []
    
    #...
    #20 more lines like this
    
    CW_Stall_Current_A = []
    
    with open(filename,'r') as csv_file:
        csv_reader=csv.reader(csv_file,delimiter=',')
        for lines in csv_reader:
            Date.append(lines[0])
            Serial_No.append(lines[1])
            Range.append(lines[5])
            Size.append(lines[6])
            RPM.append(lines[13])
            #...    
            #20 more lines like this
            CW_Stall_Current_A.append(lines[147])
    
    ## Do something with the data in each file

您可以使用索引+列名元组列表,而不是固定数量的硬编码变量:

import csv

def extract_csv(filename, columns, delimiter=',', encoding='utf8'):
    """extracts given columns from a CSV file into a dict.
       columns must be a list of (idx, name) tuples"""

    data = {name: [] for idx, name in columns}

    with open(filename, encoding=encoding, newline='') as csv_file:
        reader = csv.reader(csv_file, delimiter=delimiter)
        for row in reader:
            for idx, name in columns:
                data[name].append(row[idx])
    return data

用法:

sample_data = extract_csv('sample.csv', [
    (0, 'Date'),
    (1, 'Serial_No'),
    (5, 'Range'),
    (6, 'Size'),
    (13, 'RPM'),
    # ... 20 more lines like this
    (147, 'CW_Stall_Current_A'),
])

print(sample_data['Date'])

相关问题 更多 >