Python CSV阅读器

Python CSV阅读器,python,csv,Python,Csv,我有一个CSV,它来自一个在文件顶部有大量垃圾的系统,因此标题行大约是第5行,甚至可能是第14行,这取决于报告发出的胡言乱语 我曾经用过: idx = next(idx for idx, row in enumerate(csvreader) if len(row) > 2) 要遍历少于2列的行,当它到达列标题(其中有12列)时,它将停止,然后我可以在读取CSV文件时使用idx和skiprows 系统已经有了更新,有人认为最好让CSV文件有效,在他们的胡言乱语之后添加11个空白逗号来对齐

我有一个CSV,它来自一个在文件顶部有大量垃圾的系统,因此标题行大约是第5行,甚至可能是第14行,这取决于报告发出的胡言乱语

我曾经用过:

idx = next(idx for idx, row in enumerate(csvreader) if len(row) > 2)
要遍历少于2列的行,当它到达列标题(其中有12列)时,它将停止,然后我可以在读取CSV文件时使用idx和skiprows

系统已经有了更新,有人认为最好让CSV文件有效,在他们的胡言乱语之后添加11个空白逗号来对齐头计数

现在我有了一个CSV,比如:

sadjfhasdkljfhasd,,,,,,,,,,
dsfasdgasfg,,,,,,,,,,
time,date,code,product 
等等

我试过:

idx = next(idx for idx, row in enumerate(csvreader) if row in (None, "") > 2)
但我认为这是熊猫的事情,它只是失败了

关于如何到达标题行有什么想法吗

代码:

lmf = askopenfilename(filetypes=(("CSV Files",".csv"),("All Files","*.*")))
    # Section gets row number where headers start
    with open(lmf, 'r') as fin:
        csvreader = csv.reader(fin)
        print(csvreader)
        input('hold')
        idx = next(idx for idx, row in enumerate(csvreader) if len(row) > 2)

    # Reopens file parsing the number for the row headers
    lmkcsv = pd.read_csv(lmf, skiprows=idx)
    lm = lm.append(lmkcsv)
    print(lm)

删除起始行,做一些逻辑工作,比如检查多个“exist”或某个单词,怎么样。比如:

f = open("target.txt","r+")
d = f.readlines()
f.seek(0)
for i in d:
    if "sadjfhasdkljfhasd" not in i:
        f.write(i)
f.truncate()

f.close()
之后,请正常读取该文件。

由于您的csv现在是一个有效文件,并且您只想过滤掉没有一定数量列的标题行,因此您可以直接在pandas中执行此操作

import pandas as pd
minimum_cols_required = 3
lmkcsv = pd.read_csv()
lmkcsv = lmkcsv.dropna(thresh=minimum_cols_required, inplace=True)
如果您的csv数据也有很多空值,并且这些值被捕获在此阈值中,则只需稍微修改您的代码:

idx = next(idx for idx, row in enumerate(csvreader) if len(set(row)) > 3)
我不确定在什么情况下None会返回,所以setrow应该这样做。如果任何内容的标题都是重复的,请执行以下操作:

from collections import Counter
# ...
idx = next(idx for idx, row in enumerate(csvreader) if len(row) - Counter(row)[''] > 2)

如何确定标题行?第一个,其中所有值都是非空的?以时间开始的那个?这是怎么回事?如果行中无,>2?这是熊猫的事吗,这将被解释为None中的行,None,>2,这将始终为false。因此,如果有N个不相关的行,OP将不得不进行N个比较?如果行中的值每次都不一样怎么办?你会怎么理解呢?谢谢,我只是以防万一,因为我不知道数据集通常会是什么样子。