我正在尝试从一个目录读取多个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)
答案 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”开头的行。