Python:DictWriter为什么要写“NULL”字节?

2024-09-27 21:28:39 发布

您现在位置:Python中文网/ 问答频道 /正文

class WhatsGoingOn:
    def __init__(self, filename, fieldNames, maxLines):
        self.file_to_write = filename
        self.fieldNames = fieldNames'
        self.maxLines = maxLines

        # Open the file for reading and writing. Create it if it doesn't exist, 
        #  and truncate it if it does.
        self.file = open(self.file_to_write, 'w+b')
        self.csvReader = csv.DictReader(self.file, fieldnames=self.fieldNames)
        self.csvWriter = csv.DictWriter(self.file, fieldnames=self.fieldNames, extrasaction='ignore')

    def looper(self):
        # Infinitly (don't worry about that - this is a daemon), 
        #  write to the file. When a certain number of lines have been written, 
        #  read the file and then truncate it.
        try:
            numRowsWritten = 0
            while True:
                # Nevermind what's being written
                self.csvWriter.writerow({'name_of_field_0': str(numRowsWritten ), 'name_of_field_1': str(numRowsWritten )})
                numRowsWritten  += 1

                if numRowsWritten  >= self.maxLines:
                    # Iterate through each row of the file
                    self.file.seek(0)

                    # This only works the first time...
                    for row in self.csvReader:
                        print row['name_of_field']

                    # Truncate the file, and restart the 
                    self.file.truncate(0)
                    numRowsWritten  = 0

        except Exception as e:
            print 'Exception!: {0}'.format(e)
            self.file.close()

输出:Exception!: line contains NULL byte

第二次命中for row in self.csvReader:行时,抛出异常,当我查看该文件时,该文件确实在开头有一大堆空字节。显然,在文件被截断后,DictWriter写了一大堆空字节(至少我是这么想的)。如何防止空字节写入文件?


Tags: and文件ofthetoselfforif
1条回答
网友
1楼 · 发布于 2024-09-27 21:28:39

显然,通过截短文件,您会弄乱写入程序的某些内部状态。不是截断,而是关闭并重新打开文件(模式w+b截断),然后重新初始化csvReader和{}。在

相关问题 更多 >

    热门问题