5

我想從其他幾個變量創建一個「完整文件名」變量,但字符串連接和字符串格式操作的行爲並不像我期望的那樣。Python 3.2 - 連接和字符串格式化行爲不像預期的那樣

我的代碼如下:

file_date = str(input("Enter file date: ")) 

root_folder = "\\\\SERVER\\FOLDER\\" 
file_prefix = "sample_file_" 
file_extension = ".txt" 

print("") 
print("Full file name with concatenation: ") 
print(root_folder + file_prefix + file_date + file_extension) 
print("Full file name with concatenation, without file_extension: ") 
print(root_folder + file_prefix + file_date) 
print("") 

print("") 
print("Full file name with string formatting: ") 
print("%s%s%s%s" % (root_folder, file_prefix, file_date, file_extension)) 
print("Full file name with string formatting, without file_extension: ") 
print("%s%s%s" % (root_folder, file_prefix, file_date)) 
print("") 

輸出,當我運行該腳本是:

C:\Temp>python test.py 
Enter file date: QT1 

Full file name with concatenation: 
.txtRVER\FOLDER\sample_file_QT1 
Full file name with concatenation, without file_extension: 
\\SERVER\FOLDER\sample_file_QT1 


Full file name with string formatting: 
.txtRVER\FOLDER\sample_file_QT1 
Full file name with string formatting, without file_extension: 
\\SERVER\FOLDER\sample_file_QT1 

我期待它來串聯名爲「.txt」在最後,除了它的用它代替字符串的前四個字符。

如何將擴展變量連接到字符串的末尾,而不是將其替換爲字符串的前n個字符?

除了如何解決這個特定的問題,我想知道爲什麼我首先遇到它。我做了什麼錯誤/我不知道Python 3.2的行爲是什麼?

回答

8

我想在您的示例中使用的方法輸入,就像這樣:

file_date = str(input("Enter file date: ")) 

可能在年底返回一個回車符。
這會導致光標在嘗試打印出來時返回到行首。 您可能需要修剪input()的返回值。

+0

證實。在運行OP的代碼後,'repr(file_date)'是''QT1 \ r'' – 2011-06-06 18:38:22

+0

我有一種感覺,就是這麼簡單。它添加了回車符「\ r」而不是換行符,但是您幫助我引導了正確的方向。謝謝! – tgxiii 2011-06-06 18:43:46

+3

在Python 3中,輸入返回一個字符串,所以不需要使用str。 – MRAB 2011-06-06 18:48:52

3

使用此行,而不是擺脫換行:

file_date = str(input("Enter file date: ")).rstrip() 
相關問題