我想知道是否可以使用raw_input()
的返回来创建文件名?
到目前为止我所拥有的:
import os
from Tkinter import Tk
from tkFileDialog import askopenfilename
Tk().withdraw()
ttnum=str(raw_input('Please enter ticket number: '))
ttnum
filename=askopenfilename()
abspath = os.path.abspath(filename)
dname = os.path.dirname(abspath)
os.chdir(dname)
f=open(filename)
contents=f.read()
file_len(filename)
file_scan(filename)
调用ttnum的代码部分:
def file_len(filename):
#Count the number of line in the Text File
f1 = open(("WiFi Logs report for tt " + ttnum,'w'))
with open(filename) as f:
for i, l in enumerate(f):
pass
f1.write('Total number of lines in file: ' + str(i+1) + '\n' + '\n')
f1.close()
def file_scan(filename):
#List of issues to Scan For
f1 = open(("WiFi Logs report for tt " + ttnum,'a'))
我可以输入输入没问题(在这种情况下是12345),但是一旦它命中代码,我得到以下内容:
Traceback (most recent call last):
File "M:\WiFi Log Scanner\WiFi_Log_Scanner.py", line 153, in <module>
file_len(filename)
File "M:\WiFi Log Scanner\WiFi_Log_Scanner.py", line 4, in file_len
f1 = open(("WiFi Logs report for tt " + ttnum,'w'))
TypeError: coercing to Unicode: need string or buffer, tuple found
我认为开头的str()会确保它是一个字符串而不是一个元组?
任何见解都将受到赞赏。
谢谢,
乔
答案 0 :(得分:2)
从open(("WiFi Logs report for tt " + ttnum,'a'))
中删除一层括号:
open("WiFi Logs report for tt " + ttnum,'a')
使用额外的括号,将一个参数传递给open
,此参数为元组:一对值,而不是{{期待它的第一个参数。
旁注(与您的错误无关):您在阅读文件之前没有open
(并且您的实际代码仅在chdir
已经绝对时才有效,这是filename
是。tk_getOpenFile
对此无效。) 当 chdir
是必要的时候,它容易出错(它引入隐藏状态)和线程不安全。