test.txt的是一個 「\ n」 個分割文本文件:蟒讀取塊文件,但與換行結束( n)的
F =開放( 'test.txt的', 'R') f.read(256)
但是,雖然讀取256,最後的記錄可能不會滿線。
如何閱讀,如:
我設置讀取256 但是當248是「\ n」 和256的最後一個記錄不完整的線 剛纔看了248,和f.tell()給248的位置。
謝謝。
test.txt的是一個 「\ n」 個分割文本文件:蟒讀取塊文件,但與換行結束( n)的
F =開放( 'test.txt的', 'R') f.read(256)
但是,雖然讀取256,最後的記錄可能不會滿線。
如何閱讀,如:
我設置讀取256 但是當248是「\ n」 和256的最後一個記錄不完整的線 剛纔看了248,和f.tell()給248的位置。
謝謝。
你關心效率嗎?
這裏是做它的一種方法:
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
是的,我可以讀取大文件,並對讀取的內容做其他事情,如果我一行一行地讀,如果我一行一行讀,它會很慢,謝謝。 – stutiredboy 2012-02-09 03:52:35
不用擔心。我現在稍微修改它以使用更少的內存。 – 2012-02-09 05:17:13
-1(1)在哪裏循環讀取整個文件(或者至少要讀取,直到有足夠的整行)? (2)'data1'沒有定義(3)'data [-1]!= data [-1] .splitlines()[ - 1]'是快速文件讀取器的一部分? – 2012-02-09 10:51:55
如果您使用換行符來拆分數據,爲什麼不以相同的方式讀取它?
with open('test.txt', 'r') as f:
lines = f.readlines()
# Now each line in lines is a complete line.
你想要做的是讀完整的行。對於這個任務,你通常會做這樣的事情。
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)
最簡單的方法來讀取與由任何的'\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代碼中做同樣的事情會更快。
這將超過256,所以相當於f.read(255)+ f.readline() – 2012-02-09 11:14:54
流應該如何知道數據中是否還有新行?如果你的文件被分成幾行,而且行數很重要,你爲什麼要用固定大小的塊來讀取它? – millimoose 2012-02-09 02:03:13
您可能來自另一種語言,您在低級別訪問文件時需要解決像這樣的問題(也許是C?)。在Python中,按行分割文件是正常的,並且有很多好的方法可以做到這一點(下面答案中的例子)。你可能不需要使用read(),除非你在滾動你自己的二進制格式 – deontologician 2012-02-09 02:12:01