python - 如何使用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)
推荐阅读
- r - 将相似的元素组合在一起
- php - 如何将数据从 Excel 导入 Laravel 中的 mysql 数据库?(php、laravel、mysql)
- java - 如何使用 open office uno API 克隆 TextTable 并将 N 个克隆的 TextTable 粘贴到原始 TextTable 下方
- django - 在 django 中找不到 GDAL 库。我能做些什么来解决这个问题?
- r - 根据两个类别对每个 id 进行排名
- html - 如何通过一键单击以角度订阅退订?
- flask - 使用 Flask-SQLAlchemy 连接到谷歌云 SQL 错误
- reactjs - 获取选中的下拉项并显示在控制台日志中
- node.js - npm/yarn/yarn2/pnpm 首先获取 package.json 以解析“os”字段吗?
- postgresql - Postgresql 在不使用序列或时间戳的情况下获取最后一行