2017-08-07 20 views
0

我一直在尋找高和低的方式來拼湊到一起無濟於事。我用我的蟒蛇很生鏽,但我試圖寫一個(我認爲)簡單的程序,我幾乎禿頭。 此程序的目標是讓某人輸入零件編號作爲輸入,即「ABC」,並搜索與該名稱匹配的文件夾的目錄,然後打開該文件夾內的所有文件。這通常是一個.pdf,可能還有2-3個excel文件。我可以在使用open()進行測試的同時將整個文件路徑粘貼進去,但我希望它基於用戶輸入。當我運行下面的代碼時,我發現它找到了正確的目錄中的文件(我創建了一個名爲ABC.txt的文件進行測試),但無法打開它,因爲它爲文件名添加了額外的.txt擴展名。Python 2.7基於用戶輸入的搜索目錄,並打開文件夾中的所有文件

import os 
import os.path 
partno ="" 
partno = raw_input("Enter Part No:") #input from user to search dir 
yourpath = r'C:\Python27' 
#All folders to be searched stem from one parent dir 
print ("Loading Part No %r files...Please wait") % partno 
for dname, _, fnames in os.walk(r'C:\Python27'): 
    for fname in fnames: 
     if partno in fname: 
      filepath = (os.path.abspath(os.path.join(dname, fname))) 
open (filepath,"r") 
print filepath 

這是我收到的輸出...但它不會打開文件。

Enter Part No:ABC 
Loading Part No 'ABC' files...Please wait 
C:\Python27\Paperless Test\ABC\ABC.txt.txt 

編輯:對不起,我離開我的電腦,所以我使用遠程桌面,忘了更新後,我斷開連接。

今天更新和完成的代碼。完美的工作減去一個小問題,這不是一個大問題,應該很容易解決。

這裏是我的實際目錄的更新代碼。再次感謝所有幫助傢伙!

import os 

partno ="" 
partno = raw_input("Enter Part No:") #Takes user input of Part No 
yourpath = r"Y:\SHOP\MANUFACTURING DOCS" #Parent directory 
print ("Loading Part No %r files...Please wait") % partno 

for root, dirs, files in os.walk(yourpath, topdown=True): 
    for name in dirs: 
     if name == partno: #Matches folder in directory to `part no` 
      path_to_files = (os.path.abspath(os.path.join(root, name))) 
      #Stores path in variable so files are only found in this folder 
      print path_to_files #Confirmation line for me 
for dname, _, fnames in os.walk(path_to_files, topdown=True): 
    for fname in fnames: 
     if fname.startswith(partno): 
      filepath = (os.path.abspath(os.path.join(dname, fname))) 
      os.startfile(filepath) #Opens all files in folder in their 
      native applications 
      print filepath 
raise SystemExit 

注:當我運行這個發現並打印目錄非常快,但是當它運行的程序的下半年需要5-10秒內找到,打印和打開文件。這是否與我編碼的方式有關?

回答

0

正如評論中所述,open實際上並不是打開文件的方式,你只是在想你的方式,它只是給你一個參考文件的問題。

要啓動與給定文件的應用程序(在的Windows),你需要一個不同的功能:

os.startfile(filename) 

接受的答案的問題@identicon鏈接提到了不同的方法,這恰好跨平臺(使用os.subprocess)。

相關問題