Python TypeError:列表索引必须是整数或片而不是str
我不能让这个工作,我已经阅读了其他关于这个问题的SO qs,但我似乎找不到适合我的应用程序的信息。Im gettingPython 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
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