[英]Checking if a file exists from stdin <
我试图在应该从命令行获取文件的Python脚本上创建验证。 很像:
./script.py < somefilename
如您所见,文件名可能没有任何扩展名。 最好也应该在多个平台上工作。
在验证方面,它应该能够容纳由换行符\\n
分隔的字符串行。
这带来了两个我无法真正解决的问题:
在我当前的形式中,我使用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.