使默认输出文件依赖于输入文件
Making default output file dependent on input file
我正在尝试制作一个 python 脚本,将一种文件类型转换为另一种文件类型,我希望可以选择指定输出文件,但默认情况下仅更改扩展名默认文件名。
例如:我想让convert('foo.gb')
输出foo.faa
,但是convert('foo.gb', 'bar.faa')
输出bar.faa
我的实现方式是:
#!/usr/bin/env python
def convert(inputFile, outputFile = None):
[code that converts data]
if not outputFile:
import re
name = re.match('(.+)\.\w+', inputFile)
outputFile = './{0}.faa'.format(name.group(1))
with open(outputFile, 'w+') as outFaa:
outputFaa.write([stuff to write])
因此,它会检查是否已指定输出,如果未指定,则使用正则表达式更改输入文件名以具有正确的扩展名。这段代码有效,但看起来有些草率,或者至少不是很可读。如果文件名在扩展名之前以外的任何地方都有 .
,它也会中断,有时可能会有。
有更好的方法吗?
import os
if output_fname is None:
basename, ext = os.path.splitext(input_fname)
output_fname = basename + ".faa"
请参阅 https://docs.python.org/3.4/library/os.path.html
处的文档
编辑:还不错;我真正要做的唯一不同的事情是使输出文件名处理成为函数中的第一件事。这只会让下一个人更容易弄清楚参数的来源以及如何正确使用它们:
import os
def convert(in_fname, out_fname = None):
# start by sanitizing parameters
if out_fname is None:
basename, ext = os.path.splitext(in_fname)
out_fname = basename + ".faa"
# read data
with open(in_fname) as inf:
data = inf.read() # or inf.readlines()
# do conversion
result = do_conversion(data)
# write result
with open(out_fname, "w") as outf:
outf.write(result) # or .write("\n".join(result))
请在您的 Python 安装中使用友好人员提供的电池。看看 os.path
,尤其是 splitext。
那你可以这样写:
def convert(filename, changeto=None):
basename, ext = os.path.splitext(in)
if changeto is None:
return basename + ".faa"
return changeto
在您的应用程序中,您需要注意路径结构。我只想将上面的函数用于不包含目录分隔符的文件名。
我正在尝试制作一个 python 脚本,将一种文件类型转换为另一种文件类型,我希望可以选择指定输出文件,但默认情况下仅更改扩展名默认文件名。
例如:我想让convert('foo.gb')
输出foo.faa
,但是convert('foo.gb', 'bar.faa')
输出bar.faa
我的实现方式是:
#!/usr/bin/env python
def convert(inputFile, outputFile = None):
[code that converts data]
if not outputFile:
import re
name = re.match('(.+)\.\w+', inputFile)
outputFile = './{0}.faa'.format(name.group(1))
with open(outputFile, 'w+') as outFaa:
outputFaa.write([stuff to write])
因此,它会检查是否已指定输出,如果未指定,则使用正则表达式更改输入文件名以具有正确的扩展名。这段代码有效,但看起来有些草率,或者至少不是很可读。如果文件名在扩展名之前以外的任何地方都有 .
,它也会中断,有时可能会有。
有更好的方法吗?
import os
if output_fname is None:
basename, ext = os.path.splitext(input_fname)
output_fname = basename + ".faa"
请参阅 https://docs.python.org/3.4/library/os.path.html
处的文档编辑:还不错;我真正要做的唯一不同的事情是使输出文件名处理成为函数中的第一件事。这只会让下一个人更容易弄清楚参数的来源以及如何正确使用它们:
import os
def convert(in_fname, out_fname = None):
# start by sanitizing parameters
if out_fname is None:
basename, ext = os.path.splitext(in_fname)
out_fname = basename + ".faa"
# read data
with open(in_fname) as inf:
data = inf.read() # or inf.readlines()
# do conversion
result = do_conversion(data)
# write result
with open(out_fname, "w") as outf:
outf.write(result) # or .write("\n".join(result))
请在您的 Python 安装中使用友好人员提供的电池。看看 os.path
,尤其是 splitext。
那你可以这样写:
def convert(filename, changeto=None):
basename, ext = os.path.splitext(in)
if changeto is None:
return basename + ".faa"
return changeto
在您的应用程序中,您需要注意路径结构。我只想将上面的函数用于不包含目录分隔符的文件名。