在Python程序中遇到一个问题,程序无法处理多个文本文件。当尝试使用tkFileDialog.askopenfilename
函数打开多个文本文件时,程序可以成功处理多个平面内文本文件,但是当处理多个平面外文本文件时,程序会出现错误。
以下是在处理多个平面外文本文件时产生的错误信息:
Traceback (most recent call last):
File "C:\ProjectMAPG\TRYPYTHON\src\OldPythonTry.py", line 100, in <module>
Name = call_Controller(file_path_IP, InputfilesListOoplane)
File "C:\ProjectMAPG\TRYPYTHON\src\OldPythonTry.py", line 67, in call_Controller
with open(InputfilesListOoplane) as f1:
IOError: [Errno 22] invalid mode ('r') or filename: u'C:/Users/zhenhui/Desktop/bye1.txt C:/Users/zhenhui/Desktop/hello1.txt'
2. 解决方案
根据错误信息,问题似乎是由于程序无法正确处理多个平面外文本文件的文件路径。在程序中,打开平面外文本文件的代码如下:
InputfilesListOoplane = file_path_Ooplane#master.tk.splitlist(file_path_Ooplane)
在这种情况下,file_path_Ooplane
是一个包含多个平面外文本文件路径的字符串,而master.tk.splitlist
函数并没有被正确调用来将这个字符串分割成一个包含多个文件路径的列表。因此,当程序尝试使用open
函数打开InputfilesListOoplane
时,就会出现错误。
为了解决这个问题,需要将file_path_Ooplane
分割成一个包含多个文件路径的列表,然后使用open
函数逐个打开这些文件。可以在call_Controller
函数中添加以下代码来实现这一点:
InputfilesListOoplane = master.tk.splitlist(file_path_Ooplane)
with open(InputfilesListOoplane[0]) as f1:
f1.readline()
这样,程序就可以正确地处理多个平面外文本文件了。
以下是在Python中处理多个文本文件的完整代码示例:
import Tkinter as Tk
import os
def extractFilename(FileNameOnly):
stripText = string.split(FileNameOnly, " ")
FileName = stripText[0]
return (FileName)
pass
def call_Controller(file_path_Inplane, InputfilesListOoplane):
FileNameOnlyIP = splitext(basename(file_path_Inplane))[0]
Name = extractFilename(FileNameOnlyIP)
#Extract raw inplane
with open(file_path_Inplane) as f:
f.readline()
#Extract raw outplane
with open(InputfilesListOoplane[0]) as f1:
f1.readline()
return Name
if __name__ == '__main__': #start of program
win = Tk.Tk() #Open up connection and declare button and label
master=win
initial_dir = "C:\VSM"
#Create Directory if its not there
try:
if not os.path.exists(newDirRH[0]):os.makedirs(newDirRH)
except: pass
#Open to select multiple files for files
file_path_Inplane= tkFileDialog.askopenfilename(initialdir=initial_dir, title="Select VSM Files", multiple =1)
if file_path_Inplane != "": pass
else:
print "You didn't open anything!"
InputfilesListInplane = win.tk.splitlist(file_path_Inplane)
#Open to select multiple files for outplane
file_path_Ooplane = tkFileDialog.askopenfilename(initialdir=initial_dir, title="Select Out of Plane Files", multiple = 1)
if file_path_Ooplane != "":
pass
else:
print "You didn't open anything!"
InputfilesListOoplane = master.tk.splitlist(file_path_Ooplane)
for file_path_IP in InputfilesListInplane:
Name = call_Controller(file_path_IP, InputfilesListOoplane)
print "Done " + Name