【问题标题】:Copying a huge file using Python scripts使用 Python 脚本复制一个大文件
【发布时间】:2021-03-17 14:34:33
【问题描述】:

我正在使用下面的 python 函数来制作文件的副本,我正在将其作为 Azure 数据工厂管道中数据摄取的一部分进行处理。这适用于小文件,但无法处理大文件而不返回任何错误。在为 2.2 GB 文件调用此函数时,它会在写入 107 KB 数据后停止执行而不会引发任何异常。谁能指出可能是什么问题在这里

 with open(Temp_File_Name,encoding='ISO-8859-1') as a, open(Load_File_Name, 'w') as b:
  for line in a:    
    if ' blah blah ' in line:
      var=line[34:42]
    data = line[0:120] + var + '\n'
    b.write(data)

输入输出位置,我这里使用的是Azure Blob存储中的文件。我是按照这个方法的,因为我需要读取每一行并在读取后执行一些操作

【问题讨论】:

    标签: python azure-blob-storage


    【解决方案1】:

    您的 sn-p 会浪费计算/时间将文件加载到内存中并将其写回磁盘。使用底层操作系统使用pythonspathlibshutil复制文件。

    看看这个stackoverflow post。这是最佳答案:

    import pathlib
    import shutil
    
    my_file = pathlib.Path('/etc/hosts')
    to_file = pathlib.Path('/tmp/foo')
    
    shutil.copy(str(my_file), str(to_file))  # For older Python.
    shutil.copy(my_file, to_file)  # For newer Python.
    

    【讨论】:

    • 但是如果我需要逐行复制,最好的方法应该是什么,这是因为我必须在阅读每一行后执行一些操作
    • 您能提供更多信息吗?你在每条线上执行什么操作? infile 有什么文件格式?
    • 我正在检查每一行是否有特定的字符串。如果是,我将执行子字符串操作,并在写入新文件之前将该子字符串附加到每一行。
    • 您能否编辑问题并添加 if isslice 的定义?
    • 我明白了。也许使用'r' 添加只读模式可能会加快速度:open(Temp_File_Name, 'r' ,encoding='ISO-8859-1')。如果您只需要源文件中与模式匹配的行,则可以使用正则表达式减少输入文件。
    猜你喜欢
    • 2016-03-30
    • 2014-10-13
    • 1970-01-01
    • 2013-02-26
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多