如何仅使用其扩展名打开文件?
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):
...
【讨论】:
以上是关于如何仅使用其扩展名打开文件?的主要内容,如果未能解决你的问题,请参考以下文章
Excel打开文件显示文件格式和扩展名不匹配。文件可能已损坏或不安全。除非你信任其来源,是不是仍要打开