如何仅使用其扩展名打开文件?

Posted

技术标签:

【中文标题】如何仅使用其扩展名打开文件?【英文标题】:How to open a file only using its extension? 【发布时间】:2017-03-20 01:12:21 【问题描述】:

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

【问题讨论】:

Python: script's directory的可能重复 @Jean-FrancoisFabre 这个问题是关于 Python 的 realpath 目录的。就我而言,我有兴趣打开一个文件而不显式提供其名称(即仅基于其文件扩展名),该名称恰好位于脚本的 realpath 目录中。对问题进行了一些小的修改,以使区分更加清晰。 【参考方案1】:

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

【讨论】:

搜索工作目录,而不是脚本目录。 @ShadowRanger 我更新了我的问题,因为它是工作目录还是脚本目录对我没有任何影响。感谢您指出。 @ShadowRanger 打开具有相对路径的文件,因为 OP 也会在工作目录中打开。我猜这就是 OP 的意思。 @Mureinik 你猜对了,尽管我应该在我最初的帖子中说得更清楚;编辑了问题,所以现在应该很清楚了。【参考方案2】:

您也可以使用glob,这比os 更容易

import glob

text_file = glob.glob('*.txt') 
# wild card to catch all the files ending with txt and return as list of files

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')

【讨论】:

【参考方案3】:

从 Python 3.4 版开始,可以使用出色的 pathlib 库。它提供了一个glob 方法,可以很容易地根据扩展名进行过滤:

from pathlib import Path

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):
        ...

【讨论】:

以上是关于如何仅使用其扩展名打开文件?的主要内容,如果未能解决你的问题,请参考以下文章

shp文件是啥文件,怎么打开?

安卓手机如何打开.xlsx;文件

谁知道mat文件怎么打开 详细

Excel打开文件显示文件格式和扩展名不匹配。文件可能已损坏或不安全。除非你信任其来源,是不是仍要打开

excel打开文件显示文件格式和扩展名不匹配。文件可能损坏或不安全,除非你信任其来源,是不是仍要打开。

如何仅在java中打开现有文件[重复]