从不同的行开始读取多个csv

时间:2018-10-20 01:18:46

标签: python

我正在尝试从一个目录读取多个csv文件。文件以摘要开头,而不是实际原始数据。原始数据从找到“ max”一词的地方开始,并且可以在任何行中。我有下面的代码,但它给我以下错误:IndexError:列表索引超出范围 谁能帮我解决这个问题?

csv_reader = csv.reader(open(file_path, 'rU'),dialect=csv.excel_tab)
max_found = False
max_row = None
for index, row in enumerate(csv_reader):

    if row[index]=='max’:
       print(row)
       max_row = index
       max_found = True
       print(max_found)
       df = pd.read_csv(file_path)

我尝试了以下修改的代码,但是程序不会停止运行。我可能做错了事。

        n = 0
        with open(file_path,'rU') as fp:
            csv_reader = csv.reader(fp)
            while True:
                for line in csv_reader:
                    if line == "max":
                        break
                        print(line)
                        n = n + 1
                        df = pd.read_csv(file_path, skiprows=n)

1 个答案:

答案 0 :(得分:0)

由于您最终将使用INSERT INTO fleet_details (Fleet_no,Job_id,Quantity,Charge_amount) VALUES ('9000001', 'Lub-01', '1', '600.00'), ('9000001', 'Part-01', '1', '900.00'), ('9000002', 'Lub-01', '1', '600.00'), ('9000002', 'Part-01', '1', '900.00'), ('9000002', 'AirC–01', '1', '1000.00'), ('9000003', 'Lub-02', '1', '1000.00'), ('9000003', 'Part-02', '2', '3400.00'), ('9000003', 'BA-01', '1', '400.00'), ('9000004', 'AirC–03', '1', '0.00'), ('9000005', 'Lub-03', '1', '1700.00'), ('9000006', 'Lub-01', '1', '600.00'), ('9000006', 'Part-01', '1', '900.00'), ('9000007', 'Lub-02', '1', '1000.00'), ('9000007', 'Part-02', '1', '3400.00'), ('9000007', 'Tyre-02', '2', '2120.00'), ('9000008', 'Lub-01', '1', '600.00'), ('9000008', 'Part-01', '1', '900.00'), ('9000009', 'Lub-03', '1', '1700.00'), ('9000009', 'Part-02', '1', '3400.00'), ('9000009', 'AirC – 01', '1','1000.00'), ('9000009', 'Tyre-01', '1', '150.00'), ('9000010', 'AirC–03', '1', '0.00'), ('9000010', 'Part-02', '1', '0.00'), ('9000011', 'Lub-01', '1', '600.00'), ('9000011', 'Part-01', '1', '900.00'), ('9000011', 'AirC–01', '1', '1000.00'), ('9000012', 'Lub-03', '1', '1700.00'), ('9000012', 'Part-02', '1', '3400.00'), ('9000012', 'BA-01', '1', '400.00'); INSERT INTO job(Job_id, Description, Service_Charge, Part_Charge, Unit) VALUES ('Lub-01', 'Lubricant Minor Svs', '100.00', '500.00','1 unit'), ('Lub-02', 'Lubricant Major Svs', '200.00', '800.00', '1 unit'), ('Lub-03', 'Lubricant Major Svs + Break Lubricant', '500.00', '1200.00', '1 unit'), ('Part-01', 'Spare Part Service Minor', '300.00', '600.00', '1 unit'), ('Part-02', 'Spare Part Service Major', '300.00', '1400.00', '1 unit'), ('Part-03', 'Spare Part Service Overhaul', '1200.00', '8000.00', '1 unit'), ('AirC-01', 'Air-Cond Minor Maintanance', '400.00', '600.00', '1 unit'), ('AirC-02', 'Air-Cond Major Maintanance', '700.00', '1500.00', '1 unit'), ('AirC-03', 'Air-Cond Replacement', '600.00', '6000.00', '1 unit'), ('BA-01', 'Balancing & Alignment', '300.00', '100.00', '1 unit'), ('Tyre-01', 'Rotation', '1500.00', '0.00', 'N.A'), ('Tyre-02', 'Tyre Replacement', '60.00', '1000.00', '1 unit'), ('WTY-01', 'Warranty Minor', '0.00', '0.00', '1 unit'), ('WTY-02', 'Warranty Minor', '0.00', '0.00', '1 unit'); INSERT INTO billing(Billing_No, Fleet_No, Payment_Type, Payment_Date, Payment_Amount) VALUES ('88000001', '9000001', 'Credit', '2015-10-10', '1500.00'), ('88000002', '9000002', 'Credit', '2015-11-05', '2500.00'), ('88000003', '9000003', 'Credit', '2015-11-17', '4800.00'), ('88000004', '9000004', 'Wty Credit', '2015-11-21', '0.00'), ('88000005', '9000005', 'Credit', '2015-11-25', '1700.00'), ('88000006', '9000006', 'Credit', '2015-12-14', '1500.00'), ('88000007', '9000007', 'Cash', '2015-12-02', '6520.00'), ('88000008', '9000008', 'Credit', '2016-01-04', '1500.00'), ('88000009', '9000009', 'Credit', '2016-01-15', '6250.00'), ('88000010', '9000010', 'Wty Credit', '2016-01-15', '0.00'), ('88000011', '9000011', 'Credit', '2016-01-17', '2500.00'), ('88000012', '9000012', 'Credit', '2016-02-26', '5500.00'); 来读取数据,因此建议您这样做:

pd.read_csv()

上面将在要读取的CSV中包含带有“ max”的行,如果您是指CSV以“ max”的行下方的行开始,请将n = 0 with open(file_path) as fp: while True: line = fp.readline() if line.startswith("max"): break n = n + 1 df = pd.read_csv(file_path, skiprows=n) 行放在if语句之前。另外,在这里我假设文件中必须存在以“ max”开头的行。