是否可以使用raw_input()的输出作为新文件名?

时间:2013-02-10 17:25:31

标签: python-2.7 createfile raw-input

我想知道是否可以使用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()会确保它是一个字符串而不是一个元组?

任何见解都将受到赞赏。

谢谢,

1 个答案:

答案 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是必要的时候,它容易出错(它引入隐藏状态)和线程不安全。