仅使用其扩展名(Python)打开文件

时间:2016-11-06 17:51:29

标签: python-3.x file input io user-input

我有一个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中实现这个目标?

3 个答案:

答案 0 :(得分:4)

您可以使用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]

答案 1 :(得分: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

设置的当前目录

您可以通过设置

切换到工作目录

os.chdir(r'cur_working_directory')

答案 2 :(得分:0)

从 Python 3.4 版开始,就可以使用强大的 pathlib 库。它提供了一个 glob 方法,可以轻松地根据扩展名进行过滤:

from pathlib import Path

path = "."  # current directory
extension = ".txt"

file_with_extension = next(Path().glob(f"*{extension}"))  # returns the file with extension or None
if file_with_extension:
    with open(file_with_extension):
        ...