2012-02-09 47 views
0

test.txt的是一個 「\ n」 個分割文本文件:蟒讀取塊文件,但與換行結束( n)的

F =開放( 'test.txt的', 'R') f.read(256)

但是,雖然讀取256,最後的記錄可能不會滿線。

如何閱讀,如:

我設置讀取256 但是當248是「\ n」 和256的最後一個記錄不完整的線 剛纔看了248,和f.tell()給248的位置。

謝謝。

+0

流應該如何知道數據中是否還有新行?如果你的文件被分成幾行,而且行數很重要,你爲什麼要用固定大小的塊來讀取它? – millimoose 2012-02-09 02:03:13

+0

您可能來自另一種語言,您在低級別訪問文件時需要解決像這樣的問題(也許是C?)。在Python中,按行分割文件是正常的,並且有很多好的方法可以做到這一點(下面答案中的例子)。你可能不需要使用read(),除非你在滾動你自己的二進制格式 – deontologician 2012-02-09 02:12:01

回答

-1

你關心效率嗎?

這裏是做它的一種方法:

data=f.read(256) 
data=data.splitlines(True) 
if data[-1]!=data[-1].splitlines()[-1]: 
    #must be newline at end of last line 
    data="".join(data) 
else: 
    data="".join(data[:-1]) 

print data 
+0

是的,我可以讀取大文件,並對讀取的內容做其他事情,如果我一行一行地讀,如果我一行一行讀,它會很慢,謝謝。 – stutiredboy 2012-02-09 03:52:35

+0

不用擔心。我現在稍微修改它以使用更少的內存。 – 2012-02-09 05:17:13

+0

-1(1)在哪裏循環讀取整個文件(或者至少要讀取,直到有足夠的整行)? (2)'data1'沒有定義(3)'data [-1]!= data [-1] .splitlines()[ - 1]'是快速文件讀取器的一部分? – 2012-02-09 10:51:55

2

如果您使用換行符來拆分數據,爲什麼不以相同的方式讀取它?

with open('test.txt', 'r') as f: 
    lines = f.readlines() 
# Now each line in lines is a complete line. 
0

你想要做的是讀完整的行。對於這個任務,你通常會做這樣的事情。

size_so_far = 0 
contents = [] 

for line in open('test.txt'): 
     size_so_far += len(line) 
     if size_so_far > 256: 
     break 
     contents.append(line) 

contents = "".join(contents) 
0

最簡單的方法來讀取與由任何的'\n''\r''\r\n'或那些的甚至一個混合物中分離的可變長度行的文件是:

with open('yourfile.txt', 'rU') as f: 
    for line in f: 
     do_something_with(f) 
     # optional, if you want to bale out after 256 bytes: 
     if f.tell() >= 256: break 

這樣做是讀大塊,找到行尾,並一次產生一行。底層代碼是用C編寫的。我還沒有看到任何證據表明在Python代碼中做同樣的事情會更快。

+0

這將超過256,所以相當於f.read(255)+ f.readline() – 2012-02-09 11:14:54

相關問題