这是对此的跟进问题:Python: Find keywords in a text file from another text file
我想将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
答案 0 :(得分:1)
线索在“列表索引超出范围”消息中。在编写行时,您同时引用了invoice_data[i]
和invoice_data[i+2]
(虽然我不确定为什么要将它们放在列表中,因为尝试将列表写为CSV元素也可能会造成麻烦)。
您的for
语句可以i
一直到len(invoice_data)-1
,并且显然在该值下,索引i+2
超出了允许的索引范围 - 因此您可以获得追溯
您在评论中询问为什么人们会继续低估您的问题。我怀疑这是因为他们没有真正的努力来理解错误究竟是什么。在您之前提到的问题中,您说“我继续获取索引错误。我是否需要先将其存储在表中?”但是你没有解释为什么你认为这会有所帮助,或者甚至是它应该意味着什么。
我怀疑你可能在你走路之前试图跑步,虽然尝试困难的问题表明了一些精神,但在努力招募SO的帮助之前你会很好地看看你得到的输出 - Python产生的信息大多数都有意义,如果你不理解它们,那么也许你应该首先尝试确定它们的含义。 “这个错误信息意味着什么”通常是一个可以接受的问题,如果你真的无法理解它。
正如您所了解的那样,您无疑将能够更好地确定您的计划出现了什么问题,但依赖其他人不会像您自己理解的那样尽快理解您的理解。
答案 1 :(得分:0)
特别感谢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()
使用pandas的另一种方式:
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()