2013-02-10 69 views
0

我想知道是否可以使用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()在開始時會確保它,沒錯,是一個字符串,而不是一個元組?

任何有識之士將不勝感激。

感謝,

回答

2

刪除括號從open(("WiFi Logs report for tt " + ttnum,'a'))一層:

open("WiFi Logs report for tt " + ttnum,'a') 

有了額外的括號,你通過一個參數open,而這種說法是元組:一對值,這不是open期望的第一個參數。

旁註(無關的錯誤):你不必chdir你讀前一個文件(與你的實際代碼只能在filename已經是絕對的,它的tk_getOpenFile結果是chdir沒有按。這裏沒有任何幫助)。而chdir是必要的,它很容易出錯(它引入了隱藏狀態)和線程不安全。

+0

酷,得到它創建一個文件,只是一個未指定類型的文件。一旦你選擇了要使用的程序,它會打開,但是我認爲我會暫時回去使用一個普通的字符串而不是元組。不過謝謝,可以牢記這一點,並解決它,看看我是否可以找到工作。 關於'chdir',如果我在生成的報告中沒有這樣的內容,就會進入根文件夾,而不是從同一個文件夾中提取文件。爲了方便,我想將它放在同一個文件夾中。除非我完全錯過了你所說的話? :) – Ultrin 2013-02-10 21:15:50

+0

當你已經有'dname'時,使用'os.path.join(dname,'WiFi Logs green frogs hot dogs')'來爲輸出文件獲取* full *路徑名,並使用這個完整的路徑名。 – 2013-02-10 21:19:33

+0

編輯:如果我在raw_input中輸入文件名時手動添加.txt,它會創建一個文本文件。這應該做一個解決方法。 再次感謝! – Ultrin 2013-02-10 21:20:05

相關問題