将一个文件的内容以换行符分隔附加到另一个文件

2024-01-01

我想,我正在尝试复制cat以与平台无关的方式使用 Linux shell 的功能,这样我就可以获取两个文本文件并按以下方式合并它们的内容:

file_1 包含:

42 bottles of beer on the wall

file_2 包含:

Beer is clearly the answer

合并文件应包含:

42 bottles of beer on the wall  
Beer is clearly the answer

然而,我读过的大多数技术最终都会产生:

42 bottles of beer on the wallBeer is clearly the answer

另一个问题是,我想要使用的实际文件是非常大的文本文件(FASTA 格式的蛋白质序列文件),因此我认为大多数逐行读取的方法效率低下。因此,我一直在尝试使用解决方案shutil, 如下:

def concatenate_fasta(file1, file2, newfile):
    destination = open(newfile,'wb')
    shutil.copyfileobj(open(file1,'rb'), destination)
    destination.write('\n...\n')
    shutil.copyfileobj(open(file2,'rb'), destination)
    destination.close()

然而,这会产生与之前相同的问题,除了中间有“...”之外。显然,换行符被忽略,但我不知道如何正确管理它。

非常感激任何的帮助。

EDIT:

我尝试了 Martijn 的建议,但是line_sep返回值是None,当函数尝试将其写入输出文件时,它会引发错误。我现在已经通过os.linesep提到的不太理想的方法如下:

with open(newfile,'wb') as destination:
    with open(file_1,'rb') as source:
        shutil.copyfileobj(source, destination)
    destination.write(os.linesep*2)
    with open(file_2,'rb') as source:
        shutil.copyfileobj(source, destination)
    destination.close()

这为我提供了所需的功能,但我仍然对为什么(看似更优雅的)解决方案失败感到有点困惑。


您已以二进制模式打开文件,因此不会发生换行转换。不同的平台使用不同的行结尾,如果您使用的是 Windows\n is not enough.

最简单的方法是写os.linesep http://docs.python.org/2/library/os.html#os.linesep here:

destination.write(os.linesep + '...' + os.linesep)

但是这个could违反文件中使用的实际换行约定。

更好的方法是以文本模式打开文本文件,读取一两行,然后检查file.newlines属性 http://docs.python.org/2/library/stdtypes.html#file.newlines查看该文件的约定是什么:

def concatenate_fasta(file_1, file_2, newfile):
    with open(file_1, 'r') as source:
        next(source, None)  # try and read a line
        line_sep = source.newlines
        if isinstance(line_sep, tuple):
            # mixed newlines, lets just pick the first one
            line_sep = line_sep[0]

    with open(newfile,'wb') as destination
        with open(file_1,'rb') as source:
            shutil.copyfileobj(source, destination)
        destination.write(line_sep + '...' + line_sep)

        with open(file_2,'rb') as source:
            shutil.copyfileobj(source, destination)

您可能想测试file_2同样,如果使用的换行符约定与第一个文件不匹配,可能会引发异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将一个文件的内容以换行符分隔附加到另一个文件 的相关文章

  • 对 Python DataFrame 进行子集化

    我正在从 R 过渡到 Python 我刚刚开始使用 Pandas 我有一个可以很好地子集化的 R 代码 k1 lt subset data Product p id Month lt mn Year yr select c Time Pro
  • Python - 包和设置文件

    我有一个 python 包 需要从我的项目目录中提取设置 这是我的项目当前的结构 Project bin mypackage package files Project myproject project files start py se
  • 如何在 pygame 中聚焦光线或如何仅绘制窗口的某些圆形部分?

    对于这一点 如果您熟悉它 请想想 超级马里奥制造2 中嘘关卡中的黑暗模式 我试图在角色周围创建一个圆形聚光灯 这也将使圆圈范围内的任何内容都可见 例如部分站在地板上 敌人或场景中的任何其他物体 我的计划是首先绘制圆圈 聚光灯 然后绘制场景
  • 地图与星图的性能?

    我试图对两个序列进行纯Python 没有外部依赖 逐元素比较 我的第一个解决方案是 list map operator eq seq1 seq2 然后我发现starmap函数来自itertools 这看起来和我很相似 但事实证明 在最坏的情
  • Pygame 玩家精灵没有出现

    我一直在为学校计算机课做这个项目 但无法让玩家精灵出现 有人可以帮忙吗 当我运行主游戏循环时 除了玩家精灵之外 所有内容都正确显示 它应该由于箭头输入而在屏幕上移动并受到重力的影响 当我删除图像并仅使用对象类和矩形时 该代码也有效 impo
  • 如何更改条形图上的 y 轴限制?

    我有一个df 我从中索引了europe n我绘制了一个条形图 europe n r 5 c 45 looks like this df Country string df Population numeric 变量 plt bar df C
  • WTForms 中的小数字段舍入

    我有一个包含价格小数字段的表单 如下所示 from flask ext wtf import Form import wtforms from wtforms validators import DataRequired from deci
  • 将列表传递给 PyCrypto 中的 AES 密钥生成器

    我尝试使用 Pycrypto 生成 AES 密钥 但收到以下错误 类型错误 列表 不支持缓冲区接口 对于以下声明 aescipher AES new mykey AES MODE ECB mykey 属于类型list并包含 18854347
  • 更改Python pylab玫瑰/极坐标图中图例标题的字体大小

    我正在尝试更改玫瑰图或 极地 图上现有图例标题的字体大小 大部分代码是由不在的其他人编写的 我已经添加 ax legend title legend title setp l get title fontsize 8 添加标题 legend
  • Python变量赋值问题

    a b 0 1 while b lt 50 print b a b b a b 输出 1 2 4 8 16 32 wheras a b 0 1 while b lt 50 print b a b b a b 输出 正确的斐波那契数列 1 1
  • 在 Windows 上将 NumPy 与 BLAS 链接

    我正在尝试在 Windows 系统上安装 Theano 并且需要安装 BLAS 和 LAPACK 我的 System32 文件夹中有这些的 dll 文件 当我运行 numpy config来自 Anaconda 的 show 库的路径正确显
  • Python 函数可能会引发哪些异常? [复制]

    这个问题在这里已经有答案了 Python 中有什么方法可以确定 内置 函数可能引发哪些异常 例如 文档 http docs python org lib built in funcs html http docs python org li
  • 如何抑制 pyinstaller 生成的可执行文件窗口中的所有警告

    我已经使用 pyinstaller 从 python 文件生成了可执行文件 该程序按其应有的方式工作 但在我想隐藏的窗口中出现了一条警告消息 当 python 文件在 IDE 中运行时 以下行会抑制所有警告消息 warnings filte
  • Cython:为什么 size_t 比 int 快?

    更改某些 Cython 变量的类型int输入size t可以显着减少某些功能的时间 30 但我不明白为什么 例如 cimport numpy as cnp import numpy as np def sum int cnp int64 t
  • 监控单个文件

    我需要监控 使用watchdog http pythonhosted org watchdog index html 单个文件 而不是整个目录 避免监视整个目录的最佳方法是什么 我想this http pythonhosted org wa
  • import numpy 和 import numpy as np 之间的区别

    我明白 如果可能的话 应该使用 import numpy as np 这有助于避免由于命名空间引起的任何冲突 但我注意到虽然下面的命令有效 import numpy f2py as myf2py 以下不 import numpy as np
  • 收到的标签值 1 超出了 [0, 1) 的有效范围 - Python、Keras

    我正在使用具有张量流背景的 keras 开发一个简单的 cnn 分类器 def cnnKeras training data training labels test data test labels n dim print Initiat
  • 避免在列表理解中计算相同的表达式两次[重复]

    这个问题在这里已经有答案了 我在列表理解中使用一个函数和一个 if 函数 new list f x for x in old list if f x 0 令我恼火的是这个表达f x 在每个循环中计算两次 有没有办法以更清洁的方式做到这一点
  • sklearn 中带有词袋和附加情感特征的文本分类器

    我正在尝试构建一个分类器 除了词袋之外 还使用情绪或主题 LDA 结果 等特征 我有一个包含文本和标签的 pandas DataFrame 并且想添加情感值 5 到 5 之间的数字 和 LDA 分析结果 带有句子主题的字符串 我有一个工作词
  • Networkx 中 Louvain 分区的可视化

    请帮助我更改 Louvain 聚类算法结果的可视化 我从网站上获取了代码https github com taynaud python louvain https github com taynaud python louvain我可以重写

随机推荐