首页 > 解决方案 > 解析 csv 文件,将行存储/写入到旧文件中的行之间的新文件

问题描述

我正在尝试解析 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])

似乎只取 start 和 stop 的一个值,并为该点存储文件的其余部分。

我也试过:

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

但只存储一排。

标签: pythoncsvparsingraspberry-pi

解决方案


在我看来,您可以使用作为 pandas 一部分的 .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")

推荐阅读