如何使用 python 在目录中分配键和值



我想将Illumina对端读与参考基因组进行映射。我有一个目录,我只需要在其中使用以 paired_R1.fastq.gz 和 paired_R2.fastq.gz 结尾的文件进行配对读取。

我正在创建一个脚本,其中paired_R1是键,paired_R2是值;但是,我在 for 循环中分配键和值时遇到困难。我知道 file1 和 file2 没有定义,但我不知道如何将"endswith"的输出分别设置为键和值。

if __name__ == '__main__':
path = os.getcwd()
dir_files = os.listdir(path)
pair_reads = {}
for file in dir_files:
if file.endswith("_paired_R1.fastq.gz"):
file = file1
if file.endswith("_paired_R2.fastq.gz"):
file = file2
pair_reads[file1] = file2
print(pair_reads)

提前谢谢你!

我明白你要做什么逻辑。只有几个问题:

  • file = file1,应该已file1 = file(与 file2 相同(
  • 这两个条件语句相互矛盾,因此它们应该位于同一缩进处,否则一个将永远不会被执行
  • dir_files需要对要关联的正确文件进行排序,以便sorted(dir_files)确保这一点。
if __name__=='__main__':
path = os.getcwd()
dir_files = os.listdir(path)
pair_reads = {}
for file in sorted(dir_files):
if file.endswith("_paired_R1.fastq.gz"):
file1 = file
if file.endswith("_paired_R2.fastq.gz"):
file2 = file
pair_reads[file1] = file2 
print(pair_reads)

只要目录结构满足每次读取只有一个R1和一个R2文件,这应该可以正常工作。

编辑:另一种方式,使用列表推导:

if __name__=='__main__':
path = os.getcwd()
dir_files = sorted(os.listdir(path))
R1s = [f for f in dir_files if f.endswith("_paired_R1.fastq.gz")]
R2s = [f for f in dir_files if f.endswith("_paired_R2.fastq.gz")]
pair_reads = dict(zip(R1s, R2s))
print(pair_reads)

最新更新