2016-11-06 73 views
1

我有一個Python腳本,它打開位於特定目錄中的特定文本文件工作目錄)並執行一些操作。僅使用其擴展名打開文件(Python)

假設如果在目錄中的文本文件,那麼它將永遠不會超過一個這樣的.txt文件

with open('TextFileName.txt', 'r') as f: 
    for line in f: 
     # perform some string manipulation and calculations 

    # write some results to a different text file 
    with open('results.txt', 'a') as r: 
     r.write(someResults) 

我的問題是我怎麼能有腳本定位文本(.txt)文件在目錄中,並打開它而不明確提供其名稱(即不給出'TextFileName.txt')。所以,沒有參數要運行此腳本需要打開的文本文件。

有沒有辦法在Python中實現這一點?

+0

改變工作目錄的可能的複製[Python的:腳本的目錄(http://stackoverflow.com/questions/7293601/python-scripts-directory) –

+0

@讓FrancoisFabre這個問題是關於Python的實際路徑目錄。在我的情況下,我有興趣在沒有明確提供文件名的情況下打開一個文件(即僅僅基於它的文件擴展名),這恰好在腳本的實際路徑目錄中。對問題做了一些小的修改,以使區分更清楚。 – Yannis

回答

2

你可以使用os.listdir獲得當前目錄下的文件,以及由它們的擴展它們進行過濾:

import os 

txt_files = [f for f in os.listdir('.') if f.endswith('.txt')] 
if len(txt_files) != 1: 
    raise ValueError('should be only one txt file in the current directory') 

filename = txt_files[0] 
+0

這將搜索工作目錄,而不是腳本的目錄。 – ShadowRanger

+0

@ShadowRanger我更新了我的問題,因爲它對工作或腳本的目錄沒有任何影響。感謝您指出。 – Yannis

+1

@ShadowRanger使用相對路徑打開文件,因爲OP也在工作目錄中打開。我猜這是OP的意思。 – Mureinik

1

你也可以使用glob哪個更容易比os

import glob 
text_file=glob.glob('*.txt') 
if len(text_file) != 1: 
    raise ValueError('should be only one txt file in the current directory') 
filename = text_file[0] 

glob搜索由os.curdir設置的當前目錄

您可以N乘設置

os.chdir(r'cur_working_directory')