繁体   English   中英

检查是否存在来自stdin的文件

[英]Checking if a file exists from stdin <

我试图在应该从命令行获取文件的Python脚本上创建验证。 很像:

./script.py < somefilename

如您所见,文件名可能没有任何扩展名。 最好也应该在多个平台上工作。

在验证方面,它应该能够容纳由换行符\\n分隔的字符串行。

这带来了两个我无法真正解决的问题:

  1. 我想确保该文件的文件类型正确(即可以保存文本)
  2. 检查文件是否实际存在。

在我当前的形式中,我使用argparse来解析标志,但是由于需求已发生变化,因此我需要使用更动态的 (他们说)解决方案来实现< “ piper”。 使用stdin非常简单。

但是使用stdin带来一个问题,因为我无法验证该文件是否存在。 用户输入的textfile可能没有正确的扩展名,该扩展名会显示

'没有相应的文件和目录'


我想要做的就是创建一个容纳的文字(如“.TXT”),并检查是否与该扩展名的文件存在的情况下,输入文件没有在当前文件夹中存在可能的扩展列表。 只是为了使其更强大...

使用stdin时,这似乎非常困难(如果不是不可能的话),因为您无法在多个平台上正确地使用文件名进行接口。

我也尝试过使用fileinput,但是直到读完文件,我才能使用fileinput.filename()

for line in fileinput.input():
    print fileinput.filename()

在上述示例( ./script.py < somefilename )上,有人对我如何添加一些可靠的文件验证有任何建议吗?

在多个平台上甚至可能吗?

我建议回到argparse并检查输入文件是否存在。 该功能:

import os
def check_file(filename):
    possible_extensions = ('', '.txt', '.dat')
    for e in possible_extensions:
        if os.path.isfile(filename + e): 
            return filename + e
    else:
        return None

如果存在该名称的文件,则将返回其参数,否则它将测试可能的扩展名并返回第一个匹配项,如果找不到匹配项,则返回None

您的程序无法确定外壳如何调用它,因此从程序的角度来看这两个命令是无法区分的:

$ ./script.py < somefilename

$ cat somefilename | script.py

如果文件somefilename不存在,则调用程序将收到shell错误,如No such file or directory ,并且./script.py甚至不会被shell调用,因此原则上没有机会进行任何验证。

如果您要实现的目标是验证程序的参数,则始终可以通过使用-i开关将输入文件传递给它来提供一种方式: ./script.py -i somefilename ,并验证文件somefilename存在。 为了达到所需的通用性,该程序还可以提供一个无需-i开关即可调用的选项,假设应从stdin读取文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM