2013-04-22 106 views
1

我只有一行數據的文件(接近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

回答

3

閱讀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

0

使用函數作爲生成器。我很喜歡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。

相關問題