python读取txt文档判断某一个值是否为nul_Python如何读取以NUL分隔的行的文件?

这篇博客介绍了如何使用Python高效地读取NUL分隔的TXT文件,提供了一个名为`fileReadLine`的函数,该函数逐行读取大文件,减少内存消耗。通过设置自定义的换行符和读取缓冲大小,实现对以NUL字符分隔的行进行处理。
摘要由CSDN通过智能技术生成

我修改了markbyers的建议,这样我们就可以在Python中用NUL分隔的行来读取行文件。这种方法逐行读取潜在的大文件,并且应该更节省内存。下面是Python代码(带注释):import sys

# Variables for "fileReadLine()"

inputFile = sys.stdin # The input file. Use "stdin" as an example for receiving data from pipe.

lines = [] # Extracted complete lines (delimited with "inputNewline").

partialLine = '' # Extracted last non-complete partial line.

inputNewline="\0" # Newline character(s) in input file.

outputNewline="\n" # Newline character(s) in output lines.

readSize=8192 # Size of read buffer.

# End - Variables for "fileReadLine()"

# This function reads NUL delimited lines sequentially and is memory efficient.

def fileReadLine():

"""Like the normal file readline but you can set what string indicates newline.

The newline string can be arbitrarily long; it need not be restricted to a

single character. You can also set the read size and control whether or not

the newline string is left on the end of the read lines. Setting

newline to '\0' is particularly good for use with an input file created with

something like "os.popen('find -print0')".

"""

# Declare that we want to use these related global variables.

global inputFile, partialLine, lines, inputNewline, outputNewline, readSize

if lines:

# If there is already extracted complete lines, pop 1st llne from lines and return that line + outputNewline.

line = lines.pop(0)

return line + outputNewline

# If there is NO already extracted complete lines, try to read more from input file.

while True: # Here "lines" must be an empty list.

charsJustRead = inputFile.read(readSize) # The read buffer size, "readSize", could be changed as you like.

if not charsJustRead:

# Have reached EOF.

if partialLine:

# If partialLine is not empty here, treat it as a complete line and copy and return it.

popedPartialLine = partialLine

partialLine = "" # partialLine is now copied for return, reset it to an empty string to indicate that there is no more partialLine to return in later "fileReadLine" attempt.

return popedPartialLine # This should be the last line of input file.

else:

# If reached EOF and partialLine is empty, then all the lines in input file must have been read. Return None to indicate this.

return None

partialLine += charsJustRead # If read buffer is not empty, add it to partialLine.

lines = partialLine.split(inputNewline) # Split partialLine to get some complete lines.

partialLine = lines.pop() # The last item of lines may not be a complete line, move it to partialLine.

if not lines:

# Empty "lines" means that we must NOT have finished read any complete line. So continue.

continue

else:

# We must have finished read at least 1 complete llne. So pop 1st llne from lines and return that line + outputNewline (exit while loop).

line = lines.pop(0)

return line + outputNewline

# As an example, read NUL delimited lines from "stdin" and print them out (using "\n" to delimit output lines).

while True:

line = fileReadLine()

if line is None: break

sys.stdout.write(line) # "write" does not include "\n".

sys.stdout.flush()

希望有帮助。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值