2014-03-07 41 views
0

我想將輸出保存在與輸入相同的位置,但使用不同但仍相關的名稱。初學者Python:如何將輸出保存在同一位置並使用不同的名稱?

最小示例: 此腳本搜索輸入文件中包含字符串「NFS」的行。然後,它將結果打印到另一個文件。 我想將打印結果保存到與輸入文件相同位置的輸出文件,但使用不同的名稱,如「inputfilename.out.csv」。

下面是代碼:

from __future__ import print_function 
import sys 
fname = sys.argv[1] 

out = open(fname.out.csv, "w") #this doesn't work but this is the idea 

with open(fname) as file: 
    reader = file.readlines() 
    for line in reader: 
     if "NFS" in line: 
      print(line, file = out) 

有什麼建議?

回答

0

使用連接將「.out.csv」添加到字符串的末尾。

out = open(fname + ".out.csv", "w") 

如果輸入文件名是 「查找inputfilename」,那麼輸出將是 「inputfilename.out.csv」。如果輸入文件名已有擴展名,這可能是不受歡迎的行爲。然後「inputfilename.csv」將變成「inputfilename.csv.out.csv」。在這種情況下,您可能希望使用os.path來構建新名稱。

import os.path 
filename = "inputfilename.csv" 
root, extension = os.path.splitext(filename) 
output_filename = root + ".out" + extension 
print output_filename 

結果:

inputfilename.out.csv 
+0

''{} .out.csv'.format(fname)'比字符串連接更好;這應該避免。 –

+0

我同意格式化字符串時通常比連接更具可讀性。但是,對於在字符串末尾添加單個值的簡單情況,「+」同樣易於理解。 – Kevin

+0

這是非常低效的,那是我的觀點。 –

1

你可以使用os.path.splitext()提取擴展:

import os 

name, ext = os.path.splitext(fname) 
output_filename = name + ".out" + ext 

或者,如果你想徹底改變名稱,你可以使用os.path.dirname()獲取父目錄:

import os 

dirpath = os.path.dirname(fname) 
output_filename = os.path.join(dirpath, "outputfile.txt") 
+0

也是一個很好的工作方式,thx爲你的時間和注意力 – lexa

相關問題