我在多个目录中有相同的文件。我想更改它们的名称,因此它们将对应于它们所在目录的唯一ID。
' *'表示唯一标识符,例如' 067'例如
文件名总是' NoAdapter_len25.truncated_sorted.fastq'
我希望每个目录中的文件名为' * NoAdapter_len25.truncated_sorted.fastq',其中*代表唯一标识符
以下是我得到的错误:
Traceback (most recent call last):
File "change_names.py", line 19, in <module>
rename(name, new_name)
TypeError: Can't convert '_io.TextIOWrapper' object to str implicitly
以下是产生它的代码:
from glob import glob
import re
from os import rename
#path = "/home/users/screening/results_Sample_*_hg38_hg19/N*"
files = glob(path)
for f in files:
with open(f) as name:
sample_id = f.partition('results_')[-1].rpartition('hg38_hg19')[0]
#print(sample_id)
back = f[-38:]
new_name = sample_id + back
rename(name, new_name)
答案 0 :(得分:0)
你有一些问题:
open
时可读,但即使使用打开句柄,也可以在该文件和{{之间移动或删除该名称1}},所以你没有阻止任何竞争条件)rename
,但os.rename
传递os.rename
,而不是文件类对象str
函数尝试此操作以简化代码。当我正在做你的例子所做的事情时,我包含了一些内联注释,但它没有多大意义(或者它的形式很差):
os.path
答案 1 :(得分:-1)
您要重命名文件(name
)和文件名,它需要两个文件名。要从文件获取文件名,您可以执行此操作
old_filename = os.path.abspath(name.name)