对于处理的每个输入文件(参见下面的代码),我尝试使用“os.path.basename“写入一个新的输出文件-我知道我遗漏了一些明显的东西。。。?在
import os
import glob
import gzip
dbpath = '/home/university/Desktop/test'
for infile in glob.glob( os.path.join(dbpath, 'G[D|E]/????/*.gz') ):
print("current file is: " + infile)
**
^{pr2}$**
gzsuppl = Chem.ForwardSDMolSupplier(gzip.open(infile))
for m in gzsuppl:
if m is None: continue
...etc
file.close()
print(count)
我不清楚如何捕捉变量[0](即上游的所有内容)。xaa.fastq.gz)并用作新输出文件的基名? 不幸的是,它只是将新的输出文件写为“???”而不是6个字母的实际顺序。 谢谢你的帮助。在
我不熟悉您使用的输入数据类型,但以下是我可以告诉您的:
您缺少的“显而易见的”是
outfile
与infile
没有任何联系。您的outfile
行使用??????
,而不是实际的文件名,因为这正是您所要求的。是glob.glob
将其转换为匹配列表。在下面是我如何写输出行的这一方面:
(
, 1
确保它永远不会拆分多次,无论文件名有多疯狂。这只是使用split
或rsplit
时养成的一个好习惯。因为glob模式可以匹配不以}具有相同的路径,并最终写入输入文件。在
.xaa.fastq.gz
结尾的*.gz
文件,这意味着碰巧出现在文件夹列表中的一个随机的.gz文件将导致outfile
与{这个问题有三种解决方案,适用于您的用例:
在您的glob中使用
*.xaa.fastq.gz
,而不是*.gz
。我不推荐这样做,因为一个输入错误很容易潜入并使它们再次不同,这会悄无声息地重新引入bug。将输出写入与输入不同的文件夹。在
添加一个
assert outfile != infile
行,这样程序就会在“这种情况下永远不会发生”的情况下以有意义的错误消息结束,而不是默默地做不正确的事情。你发布的内容的缩进可能是错误的,但是看起来你打开了一堆文件,然后只关闭了最后一个。我的建议是用这个来代替,所以不可能弄错:
名称}重命名为{}。这样,您就可以仅从变量名来判断每个对象是路径(即字符串)还是Python文件对象,并且在您(重新)定义它并得到一个非常令人困惑的错误消息之前,没有访问{}的风险。
file
已经存在于标准库中,您选择的变量名没有任何帮助。我将infile
重命名为inpath
,outfile
重命名为outpath
,将{这似乎将在示例代码中从
glob()
返回的路径中获取.xaa.fastq.gz
的所有上游内容:当然,在
outfile
中结束的并不是最后的路径加上文件名,因为我不知道文件名的其余部分是什么,只需在'.rest_of_filename'
中添加一个占位符。在相关问题 更多 >
编程相关推荐