![](/img/trans.png)
[英]Python - Extracting data from a text file (list index out of range)
[英]Python: Get data from a text file and put it in an CSV file ; List index out of range
這是對此的后續問題: Python:從另一個文本文件中查找文本文件中的關鍵字
我想將line.strip中的文本數據放入2列的CSV(或excel)文件中。
這是我的嘗試:
import numpy as np
import pandas as pd
import csv
with open('C:\invoice.txt') as f:
invoice_data = [line.strip() for line in f if line.strip()]
with open('C:\dict.txt') as f:
dict_data = set([line.strip() for line in f if line.strip()])
for i in range(0, len(invoice_data), 2):
if invoice_data[i] in dict_data:
print(invoice_data[i: i + 2])
with open('C:\\Users\\fam_robo1\\Documents\\sample.csv','w') as csvfile:
fieldnames = ['keyword','data']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for i in range(0, len(invoice_data), 2):
writer.writerow ({'keyword':[invoice_data[i]] , 'data':[invoice_data[i+2]] })
csvfile.close()
任何幫助,將不勝感激 。
完整回溯:
Traceback (most recent call last):
File "C:\Users\fam_robo1\Documents\keyword.py", line 20, in <module> writer.writerow ({'keyword':[invoice_data[i]] , 'data':[invoice_data[i+2]] })
IndexError: list index out of range
提示位於“列表索引超出范圍”消息中。 在寫行時,您同時引用invoice_data[i]
和invoice_data[i+2]
(盡管我不確定為什么將它們放在列表中,因為嘗試將列表寫為CSV元素也可能會造成麻煩)。
您的for
語句最多可以將i
取到len(invoice_data)-1
,並且顯然在該值處索引i+2
超出了允許的索引范圍-因此您可以進行追溯。
您在評論中問為什么人們總是不贊成您的問題。 我懷疑這是因為他們幾乎沒有花力氣去理解錯誤的實質。 在您提到的上一個問題中,您說“我一直在獲取索引錯誤。是否需要先將其存儲在表中?” 但是您沒有解釋為什么您認為這會有所幫助,甚至沒有解釋它的含義。
我懷疑您可能會在走路之前先嘗試跑步,而嘗試困難的問題會顯示出一種精神,但在嘗試尋求SO的幫助之前,您最好認真看一下所獲得的輸出-Python產生的消息主要具有含義,如果您不了解它們,那么也許應該首先嘗試確定它們的含義。 如果您確實無法理解“此錯誤消息是什么意思”,通常是可以接受的問題。
當您學習時,毫無疑問,您將能夠更好地確定程序出了什么問題,但是依靠其他人不會像您自己的理解力那樣快速地理解您。
特別感謝holdenweb幫助我相信自己。
因此,僅在首先學習了基本的python概念之后,我才通過非常簡單的重新排序解決了這個問題。
因此,如果像我這樣的初學者正在閱讀此書,請遵循holdenweb共享的智慧,並首先了解一些基本概念,即使您認為自己可以使用它。
writer = pd.ExcelWriter('pandas_simple.xlsx')
with open('C:\\Users\\fam_robo1\\Documents\\sample.csv','w') as csvfile:
fieldnames = ['keyword','data']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for i in range(0, len(invoice_data), 2):
if invoice_data[i] in dict_data:
list1 = [invoice_data[i]];
list2 = [invoice_data[i+1]];
print(invoice_data[i: i + 2])
writer.writerow ({'keyword':[list1] , 'data':[list2] })
csvfile.close()
使用熊貓的另一種方式:
for i in range(0, len(invoice_data), 2):
if invoice_data[i] in dict_data:
list1 = [invoice_data[i]];
list2 = [invoice_data[i+1]];
print(invoice_data[i: i + 2])
df = pd.DataFrame({ 'keyword':list1 , 'information':list2})
# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1',startrow=count ,header=False, index=False )
count=count+1
# Close the Pandas Excel writer and output the Excel file.
writer.save()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.