解析csv文件,将行存储/写入新文件,到旧文件之间的行

时间:2019-04-25 11:02:50

标签: python csv parsing raspberry-pi

我正在尝试解析CSV文件,并将行存储到新CSV文件中(位于旧CSV文件的两个特定行之间)。

是否可以在两个特定行之间存储间隔行?

例如: old.csv包含1000行。 old.csv文件中的开始行位于63行中,而old.csv文件中的结束行位于112行中。 我通过检查CSV文件每一行上的特定值来获得该行。
我想将63-112之间的行存储到新的CSV文件中。

    import csv 


    check = "0000303030303030"
    end_check = "0063303030303030"

    with open('testytesttest.csv', 'w') as outfile:
        writer=csv.writer(outfile, delimiter='\t')

    with open('fack1.csv') as infile:
        reader=csv.reader(infile, delimiter='\t')

        for row in reader:    
            if end_check == row[2]:
                stop = int(row[0])  #gets the ending row
            if check == row[2]:
                start = int(row[0]) #gets the starting row

        else:
            loop_done = True
            print("loop is done")

    if loop_done ==  True:
       for row in reader:
          writer.writerow(row[start:stop])

但是

writer.writerow(row[start:stop])

似乎只采用开始和停止的一个值,并存储该点上文件的其余部分。

我也尝试过:

 if check == row[2]:
      start = int(row[0]) #gets the starting row
      writer.writerow(row)

但是只存储一行。

1 个答案:

答案 0 :(得分:0)

在我看来,您可以使用作为熊猫一部分的.iloc来实现这一目标。

import pandas as pd
import csv

def lineCheckerCSV(filepath: str, break_term: str)->int:
    with open(filepath) as file:
        filereader = csv.reader(file, delimiter=',')
        i = 0
        for line in filereader:
            if break_term in line:
                break
            i+=1
    return i


check = lineCheckerCSV("0000303030303030")
end_check = lineCheckerCSV("0063303030303030")


csv = pd.read_csv('testytesttest.csv')

csv.iloc[check:end_check,].to_csv("filename.csv")