从文件中读取一行并将其拆分 - python

问题描述:

我只有一行数据的文件(接近3 MB)我需要将它分成更小的行并将输出写入新文件。从文件中读取一行并将其拆分 - python

为如:

sample.txt的 - 文件 434D012000100009362D00000000069E0F0007000000DA434D01030010010003008000000000000000000000009C434D01200010000 ....等等

我想整条生产线分割成每每23个字节较细的线条。 即如何得到写一个python脚本告诉这么多字符后破

谢谢。

+4

您一次只能读取23个字节,然后将其输出到另一个文件,并在末尾换行。不是火箭科学。 – Cairnarvon 2013-04-22 20:33:22

+1

你想使用python的任何特定原因?不是说这是不可能的,只是有一个方便的POSIX命令可以为你做到这一点... – 2013-04-22 20:33:51

+2

'人分裂'是你的朋友的非python解决方案... – 2013-04-22 20:34:24

阅读23个字节块的文件:

from functools import partial 

with open('sample.txt', 'rb') as inputfile, open(outputfilename, 'wb') as output: 
    for chunk in iter(partial(inputfile.read, 23), ''): 
     # chunk is 23 bytes small 
     output.write(chunk + '\n') 

这里我们使用iter() function与定点遍历一个函数,直到函数返回'',空字符串。我们循环的功能是使用functools.partial()每次和每次调用参数23调用inputfile.read()。您可以使用lambda(lambda: inputfile.read(23)),但partial()更快。

+0

我不能告诉如果文件实际上是十六进制的(在这种情况下,OP可能需要46个字符的行,或者前16个字节的值)。名称'sample.txt'让我觉得它可能是* hex *,但是。 – DSM 2013-04-22 20:40:06

+0

@DSM:该帖子显示'23字节',而不是'23个字符'。 – 2013-04-22 20:42:01

+0

Martijn - 这是在十六进制谢谢:) – 2013-04-22 20:43:31

使用函数作为生成器。我很喜欢array-module

def bytesfromfile(f): 
    while True: 
     raw = array.array('c') 
     raw.fromstring(f.read(23)) 
     if not raw: 
      break 
     yield raw 

使用'c'将这些值解释为字符。 'B'作为无符号字符,即0-255。