首页 > 解决方案 > 从python中的文件开头删除不固定数量的行

问题描述

我有一个像小例子一样的文本文件:

小例子:

ScannerID,1609P0139
StagePosition,1
BindingDensity,0.19
CodeClass,Name,Accession,Count
Endogenous,CCNO,NM_021147.4,196
Endogenous,MYC,NM_002467.3,962
Endogenous,CD79A,NM_001783.3,390
Endogenous,FSTL3,NM_005860.2,67

我想删除第一行直到这一行(标题行):

CodeClass,Name,Accession,Count

在此示例中,标题行之前有 3 行,但每次都可能不同。这是预期的输出:

CodeClass,Name,Accession,Count
Endogenous,CCNO,NM_021147.4,196
Endogenous,MYC,NM_002467.3,962
Endogenous,CD79A,NM_001783.3,390
Endogenous,FSTL3,NM_005860.2,67

我为此编写了以下代码:

with open("infile.csv" , "r") as inf,
    for line in inf:
        if line.startswith("CodeClass"):
            with open('fileName.csv', 'w') as f:
                for line in s:
                    f.write(line)

但它不会返回我正在寻找的东西。你知道怎么解决吗?

标签: python-3.x

解决方案


这是现在的数据infile.csv

ScannerID,1609P0139
StagePosition,1
BindingDensity,0.19
CodeClass,Name,Accession,Count
Endogenous,CCNO,NM_021147.4,196
Endogenous,MYC,NM_002467.3,962
Endogenous,CD79A,NM_001783.3,390
Endogenous,FSTL3,NM_005860.2,67

试试这个代码,

import csv

status = False
datas = []

with open('infile.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        if row[0] == 'CodeClass':
            status = True

        if status:
            datas.append(row)


with open('fileName.csv', 'w') as file:
    employee_writer = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    for data in datas:
        employee_writer.writerow(data)

之后,您将收到fileName.csv以下值。

CodeClass,Name,Accession,Count
Endogenous,CCNO,NM_021147.4,196
Endogenous,MYC,NM_002467.3,962
Endogenous,CD79A,NM_001783.3,390
Endogenous,FSTL3,NM_005860.2,67

推荐阅读