0

raw_input()return fromを使用してファイル名を作成できるかどうか疑問に思っていますか?

私がこれまでに持っているもの:

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()は、それがタプルではなく文字列であることを保証すると思いましたか?

任意の洞察をいただければ幸いです。

ありがとう、

ジョー

4

1 に答える 1

2

括弧の層をopen(("WiFi Logs report for tt " + ttnum,'a')):から削除します。

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

余分な括弧を使用して、に1つの引数を渡しますopen。この引数はタプル、つまり値のペアです。これはopen、最初の引数に期待されるものではありません。

補足(エラーとは関係ありません):chdirファイルを読み取る前に行う必要はありません(実際のコードは、filenameがすでに絶対である場合にのみ機能します。その結果、ここではtk_getOpenFile chdirも役に立ちません)。また、必要な場合は、エラーが発生しやすく(非表示の状態になります)、スレッドセーフではありません。 chdir

于 2013-02-10T17:30:18.400 に答える