簡體   English   中英

Python:從文本文件中獲取數據並將其放入CSV文件中; 列表索引超出范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM