Парсинг csv-файлов, сохранение / запись строки в новый файл между строками из старого файла - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь проанализировать CSV-файл и сохранить / записать строки в новый CSV-файл между двумя конкретными строками из старого CSV-файла.

Можно ли сохранить интервальные строки между двумяконкретные строки?

Например: old.csv содержит 1000 строк.начальная строка находится в 63 строках в файле old.csv, а конечная строка - в 112 строках в файле old.csv.Я получаю строку, проверяя конкретные значения в каждой строке файла 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 голосов
/ 25 апреля 2019

Мне кажется, что вы можете использовать .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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...