Python TypeError:列表索引必须是整数或片而不是str

Python TypeError:列表索引必须是整数或片而不是str,python,tkinter,Python,Tkinter,我不能让这个工作,我已经阅读了其他关于这个问题的SO qs,但我似乎找不到适合我的应用程序的信息。Im gettingTypeError:列表索引必须是整数或片而不是str 我用open在函数中按住我的,因为我只想在按下按钮时调用它。我确定这与csv文件中的行的有关:我需要csv文件中的行的吗:然后是行的?我卡住了 import tkinter as tk from tkinter import * import tkinter.ttk as tkrttk fro

我不能让这个工作,我已经阅读了其他关于这个问题的SO qs,但我似乎找不到适合我的应用程序的信息。Im getting
TypeError:列表索引必须是整数或片而不是str
我用open在函数中按住我的
,因为我只想在按下按钮时调用它。我确定这与csv文件中的行的
有关:
我需要csv文件中的行的
吗:
然后是行的
?我卡住了

    import tkinter as tk
    from tkinter import *
    import tkinter.ttk as tkrttk
    from PIL import Image, ImageFont, ImageTk
    import csv
    from tkinter import filedialog
        def select_input_file():
            input_file_path = filedialog.askopenfilename(filetypes=(("CSV files", "*.csv"),))
            with open(input_file_path) as csv_file:
                csv_file = csv.reader(csv_file)
                 for row in csv_file:
                 RoNumber = row['Ro Number']
                 DateIn = row['Date In']
                 TimeIn = row['Time In']
                 TimeOut = row['Time Out']
                 RegoNumber = row['Rego Number']
                 CustomerName = row['Customer Name']
                 VehicleMake = row['Vehicle Make']
                 VehicleModel = row['Vehicle Model']
                 JobDescription = row['Job Description']
                 CurrentStatus = row['Current Status']
        
            treetime.insert("", 0, values=(RoNumber, DateIn, TimeIn, TimeOut, RegoNumber,
                                           CustomerName, VehicleMake, VehicleModel, JobDescription, CurrentStatus))

root.mainloop()
以下是错误代码RoNumber=行['Ro编号]

这里有一些.csv文件

'Ro Number,Date In,Rego Number,Customer Name,Vehicle Make,Vehicle Model,Job Description,Current Status,Time In,Time Out
123456,6/07/2020,abc123,Conor McGregor,Hyundai ,i30,"15,000 Km Service",,8:00:00 AM,4:00:00 PM
654321,31/07/2020,acb321,Nate Diaz,Ferrari,Enzo,Crank but wont fire,,9:30:00 AM,4:45:00 PM
123456,6/07/2020,abc123,Conor McGregor,Hyundai ,i30,"15,000 Km Service",,8:00:00 AM,4:00:00 PM

您正在按字段名而不是索引访问行列。要使用字段名,请尝试使用
DictReader
功能

csv_file = csv.DictReader(csv_file)
您还重用了可能导致问题的变量名

替换此代码:

with open(input_file_path) as csv_file:
    csv_file = csv.reader(csv_file)
    for row in csv_file:
为此:

with open(input_file_path) as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
此代码适用于我(它也适用于csv文件):

输出:

123456 6/07/2020 8:00:00 AM 4:00:00 PM
654321 31/07/2020 9:30:00 AM 4:45:00 PM
123456 6/07/2020 8:00:00 AM 4:00:00 PM
123456 6/07/2020 8:00:00 AM 4:00:00 PM
654321 31/07/2020 9:30:00 AM 4:45:00 PM
123456 6/07/2020 8:00:00 AM 4:00:00 PM
下面是使用tkinter的代码。它可以正确处理示例数据

import tkinter as tk
from tkinter import *
import tkinter.ttk as tkrttk
from PIL import Image, ImageFont, ImageTk
import csv
from tkinter import filedialog

def select_input_file(x):
  input_file_path = filedialog.askopenfilename(filetypes=(("CSV files", "*.csv"),))
  with open(input_file_path) as csv_file:
    rdr = csv.DictReader(csv_file)
    for row in rdr:
          RoNumber = row['Ro Number']
          DateIn = row['Date In']
          TimeIn = row['Time In']
          TimeOut = row['Time Out']
          RegoNumber = row['Rego Number']
          CustomerName = row['Customer Name']
          VehicleMake = row['Vehicle Make']
          VehicleModel = row['Vehicle Model']
          JobDescription = row['Job Description']
          CurrentStatus = row['Current Status']

          print(RoNumber,DateIn,TimeIn,TimeOut)

widget = Button(None, text='Open CSV')
widget.pack()
widget.bind('<Button-1>', select_input_file)
widget.mainloop()

很抱歉,我应该提到我已经尝试了
csv\u file=csv.DictReader(csv\u file)
,但这只返回
.csv
的第一行,如前所述更改变量。如果没有帮助,请发布部分csv文件,以便我可以测试。另外-哪一行导致错误?你能显示回溯吗?我用
读写器试过代码。它似乎工作正常。谢谢迈克,仍然只阅读了
.csv
中的一行。我的代码存储在一个函数中也许这就是原因?您是否更改了变量名?请修复代码的缩进。似乎
treetime.insert(…)
与…
是同一级别的
,因此它将执行一次,而不是针对从文件中读取的每个记录。这将修复它。。非常感谢。
123456 6/07/2020 8:00:00 AM 4:00:00 PM
654321 31/07/2020 9:30:00 AM 4:45:00 PM
123456 6/07/2020 8:00:00 AM 4:00:00 PM