【问题标题】:Replacing text in a file with the name of the file用文件名替换文件中的文本
【发布时间】:2018-01-08 08:39:08
【问题描述】:

基本上,我正在尝试编写一段代码,将带有文件的文本更改为文件本身的名称。基本上我有很多以EMBOSS_001 作为第一段文本的文件,例如(EMBOSS_001|296133516|ref|YP_003640763.1|,33.06,248,157,7,1,243,1,244,7e-31, 121)。我想将其更改为文件名。我的文件名范围从fp1_blast_output.csvfp11000_blast_output.csv。我想将文件中文本的EMBOSS 部分更改为文件的fp() 部分。这就是我所拥有的,但不幸的是它不起作用!

from glob import glob

fasta_files = glob('*output.csv')
print(fasta_files)

for fname in fasta_files:
    with open(fname) as input1, open('modified/{}'.format(fname), 'w') as output:
        data = input1.read()
        data = data.replace('EMBOSS_001',fname.split('._blast_output.csv')[0])
        output.write(data)

我最终想要的是:

fp()|296133516|ref|YP_003640763.1|,33.06,248,157,7,1,243,1,244,7e-31, 121

【问题讨论】:

  • 运行这段代码会发生什么?
  • "我有很多文件以 EMBOSS_001 作为第一段文本,例如。(fp()|296133516|ref|YP_003640763.1|,33.06,248,157,7,1,243,1,244,7e -31, 121)。”这段文字没有 EMBOSS_001 作为第一段文字?
  • 克里斯,因为我有大量文件,我正在使用 pubDB 的服务器上运行它。在输出和 EMBOSS 文本的更改未保存之前,一切似乎都正常工作!
  • Enfenion,抱歉,打错了!

标签: python csv text replace


【解决方案1】:

您的示例输入和预期/期望的结果是相同的。 您可以尝试以下方法:

with open(fname) as input1, open('modified/{}'.format(fname), 'w') as output:
    new_fname = fname.split('.aln_blast_output.csv')[0]
    for line_to_change in input1.readlines():
        output.write(line_to_change.replace('EMBOSS_001', new_fname))

请同时发布您的错误。

【讨论】:

  • 嗨,巴勃罗,感谢您的回答。不幸的是,由于未定义 fname,此脚本无法正常工作。至于我的脚本,烦人的是我在命令上运行它,就像使用 pubDB 一样,它并没有给我一个错误。据我所见,它在输出之前完成了我想要的操作。 EMBOSS 部分已更改,但未保存在输出中。
  • @BrianF 我认为您应该将脚本中的“with open(fname) ...”行与脚本中的“with open(fname) ...”行交换。
  • 即修补代码,使其与您的脚本匹配。
  • @Enfenion 不幸的是仍然没有运气。同样的问题。由于某种原因,输出实际上并未写入文件中
  • 您知道您正在将结果写入“修改”子目录中的文件,对吧?
【解决方案2】:

这行得通吗?

from glob import glob

fasta_files = glob('*output.csv')
print(fasta_files)

for fname in fasta_files:
    with open(fname) as input1, open('modified/{}'.format(fname), 'w') as output:
        data = input1.read()
        new_name = fname.split('_blast_output.csv')[0]
        changed_data = data.replace('EMBOSS_001',new_name)
        output.write(changed_data)

【讨论】:

    【解决方案3】:

    一般来说,- 我希望这实际上解决了您的问题,- 如果您想将所有 .csv 文件中的某些文本部分更改为这些文件的名称(减去“.csv”部分),这就是我的方法会接近它:

    from glob import glob
    
    fasta_files = glob('*.csv')
    
    for fname in fasta_files:
        with open(fname, 'r') as finput:
            data = finput.read()
    
        data = data.replace('EMBOSS_001', fname[:-4])             
    
        with open('modified/{}'.format(), 'w') as output:            
            output.write(data)  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-09
      • 2015-12-23
      • 2021-04-04
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多