首页 > 解决方案 > 读取包含多个不同 CSV 的 CSV 文件

问题描述

我有一个 .csv 文件,但它确实包含 5 个单独的 CSV,这给我带来了一些问题。

我目前正在尝试像这样读取文件: data = pd.read_csv("./PA_Logs/summary.csv", skiprows=1)

但这会导致错误,指出预期字段与存在的字段数量不匹配,这是有道理的,因为 CSV 具有不同数量的字段。

我也尝试过: data = pd.read_csv("./PA_Logs/summary.csv", skiprows=[1,9:]) 试图只获取第一个表,但出现语法错误。

我想将 CSV 读取为 5 个不同的文件,一个用于顶部,一个用于每个底部。

该文件是由另一个无法更改的软件生成的,因此我无法对文件结构做任何事情。

文件结构:

RUN_ID_HERE
Level,Yield,Projected Yield,Aligned,Error Rate,Intensity C1,%>=Q30
Read 1,1.31,1.31,23.92,1.40,170,91.09
Read 2 (I),0.12,0.12,0.00,nan,396,61.56
Read 3 (I),0.12,0.12,0.00,nan,319,91.23
Read 4,2.01,2.01,26.34,2.08,145,88.46
Total,8.00,8.00,24.12,1.65,274,81.46

Read 1
Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing  slope/offset,Prephasing slope/offset,Reads,Reads PF,%>=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1
1,-,38,537 +/- 10,95.79 +/- 0.52,0.156 / 0.141,nan / nan,nan / nan,13.59,13.02,93.19,3.91,300,29.32 +/- 1.21,1.80 +/- 0.05,0.83 +/- 0.12,0.51 +/- 0.06,0.48 +/- 0.10,174 +/- 16
1,1,19,537 +/- 11,96.18 +/- 0.34,0.128 / 0.149,nan / nan,nan / nan,6.84,6.58,92.93,1.97,-,30.31 +/- 0.73,1.80 +/- 0.05,0.77 +/- 0.11,0.47 +/- 0.06,0.44 +/- 0.05,189 +/- 3
1,2,19,537 +/- 10,95.41 +/- 0.35,0.184 / 0.134,nan / nan,nan / nan,6.75,6.44,93.46,1.93,-,28.32 +/- 0.63,1.80 +/- 0.06,0.90 +/- 0.09,0.54 +/- 0.05,0.52 +/- 0.12,159 +/- 6
Read 2 (I)
Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing  slope/offset,Prephasing slope/offset,Reads,Reads PF,%>=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1
1,-,38,537 +/- 10,95.79 +/- 0.52,0.000 / 0.000,nan / nan,nan / nan,13.59,13.02,68.50,0.12,0,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,456 +/- 40
1,1,19,537 +/- 11,96.18 +/- 0.34,nan / nan,nan / nan,nan / nan,6.84,6.58,68.42,0.06,-,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,495 +/- 9
1,2,19,537 +/- 10,95.41 +/- 0.35,nan / nan,nan / nan,nan / nan,6.75,6.44,68.58,0.06,-,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,417 +/- 3
Read 3 (I)
Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing  slope/offset,Prephasing slope/offset,Reads,Reads PF,%>=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1
1,-,38,537 +/- 10,95.79 +/- 0.52,0.000 / 0.000,nan / nan,nan / nan,13.59,13.02,95.73,0.12,0,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,359 +/- 23
1,1,19,537 +/- 11,96.18 +/- 0.34,nan / nan,nan / nan,nan / nan,6.84,6.58,95.55,0.06,-,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,381 +/- 7
1,2,19,537 +/- 10,95.41 +/- 0.35,nan / nan,nan / nan,nan / nan,6.75,6.44,95.91,0.06,-,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,nan +/- nan,336 +/- 4
Read 4
Lane,Surface,Tiles,Density,Cluster PF,Legacy Phasing/Prephasing Rate,Phasing  slope/offset,Prephasing slope/offset,Reads,Reads PF,%>=Q30,Yield,Cycles Error,Aligned,Error,Error (35),Error (75),Error (100),Intensity C1
1,-,38,537 +/- 10,95.79 +/- 0.52,0.116 / 0.031,nan / nan,nan / nan,13.59,13.02,83.46,3.91,300,28.12 +/- 1.59,2.14 +/- 0.14,0.98 +/- 0.23,0.67 +/- 0.11,0.61 +/- 0.08,171 +/- 13
1,1,19,537 +/- 11,96.18 +/- 0.34,0.117 / 0.029,nan / nan,nan / nan,6.84,6.58,83.30,1.97,-,28.88 +/- 1.92,2.13 +/- 0.15,0.97 +/- 0.33,0.65 +/- 0.15,0.60 +/- 0.11,184 +/- 4
1,2,19,537 +/- 10,95.41 +/- 0.35,0.114 / 0.033,nan / nan,nan / nan,6.75,6.44,83.62,1.93,-,27.37 +/- 0.55,2.15 +/- 0.12,0.99 +/- 0.07,0.68 +/- 0.03,0.62 +/- 0.03,158 +/- 2
Extracted: 622
Called: 622
Scored: 622

标签: pythonpython-3.xpandas

解决方案


此代码将逐行读取文件,并从中提取所有单个 CSV 文件并将它们添加到 CSV 文件列表中。

from io import StringIO

with open('file.txt') as f:
    lines = [l.strip() for l in f.readlines()]

csvs = []
csv = []
for line in lines:
    if ',' not in line:
        csvs.append(csv)
        csv = []
    else:
        csv.append(line)

csvs = ['\n'.join(csv) for csv in csvs if len(csv) > 0]

dfs = [pd.read_csv(StringIO(csv)) for csv in csvs]

测试:

>>> len(dfs)
5

>>> dfs[0]
        Level  Yield  Projected Yield  Aligned  Error Rate  Intensity C1  %>=Q30
0      Read 1   1.31             1.31    23.92        1.40           170   91.09
1  Read 2 (I)   0.12             0.12     0.00         NaN           396   61.56
2  Read 3 (I)   0.12             0.12     0.00         NaN           319   91.23
3      Read 4   2.01             2.01    26.34        2.08           145   88.46
4       Total   8.00             8.00    24.12        1.65           274   81.46

>>> dfs[-1]
   Lane Surface  Tiles     Density      Cluster PF Legacy Phasing/Prephasing Rate Phasing  slope/offset  ... Cycles Error         Aligned          Error     Error (35)     Error (75)    Error (100) Intensity C1
0     1       -     38  537 +/- 10  95.79 +/- 0.52                  0.116 / 0.031             nan / nan  ...          300  28.12 +/- 1.59  2.14 +/- 0.14  0.98 +/- 0.23  0.67 +/- 0.11  0.61 +/- 0.08   171 +/- 13
1     1       1     19  537 +/- 11  96.18 +/- 0.34                  0.117 / 0.029             nan / nan  ...            -  28.88 +/- 1.92  2.13 +/- 0.15  0.97 +/- 0.33  0.65 +/- 0.15  0.60 +/- 0.11    184 +/- 4
2     1       2     19  537 +/- 10  95.41 +/- 0.35                  0.114 / 0.033             nan / nan  ...            -  27.37 +/- 0.55  2.15 +/- 0.12  0.99 +/- 0.07  0.68 +/- 0.03  0.62 +/- 0.03    158 +/- 2

推荐阅读