1

我正在同时操作一个带有多个进程的 txt 文件(一些 r/w 操作)。我看到了特殊符号的痕迹^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ^@^@^@^@^@ 时不时地散布在一些线条上。这说明了什么?以及这些符号会在什么情况下出现。这是否意味着某些二进制内容被错误地写入了应该是文本的位置?

更新 我通读了文档。一些人认为这是由于 linux/windows 平台上的换行问题,而另一些人则认为这是因为网络环境中的大端/小端。事实上,我在网络文件系统中运行多个进程并操作一个常见的 txt 文件。所以我猜编码格式可能是主要原因。谁能建议如何避免这个问题?我不想编辑文件(比如手动进行文本替换)。首选生成正确文件且不包含任何空字符的干净方式。

UPDATE2 这是实现我的项目的python 伪代码。fcntl.lockf 的作用是在运行多个进程的多台机器上锁定公共操作文件。

 while(manipulatedfile size is not 0):
           open(manipulatedfile, 'r+') as fh:
           fcntl.lockf(fh, fcntl.LOCK_EX)
           all_lines = fh.readlines()
           listing=all_lines[0:50] #get the first 50 lines
           rest_lines = all_lines[50:] # get remaining lines
           fh.seek(0)
           fh.truncate()
           fh.writelines(rest_lines) # write remaining lines back to file
           fcntl.lockf(fh, fcntl.LOCK_UN)
           listing = map(lambda s:s.strip(), listing)
           do_sth(listing)

谢谢

4

2 回答 2

4

在 ASCII 中,^@是二进制零 ( NUL) 字符。

每个 ASCII 字符之间包含的数据^@有时会被错误地从 Unicode(4 个字节到一个字符)转换为 ASCII(1 个字节到一个字符),反之亦然。

要删除^@字符,请运行vi file.txt,然后输入:%s/ Ctrl++V Ctrl@ //g点击↵ Return

有关详细信息,请参阅此详细文章

于 2013-07-05T09:42:36.393 回答
2

这些是“文件漏洞”并且包含空字符。空字符(或 NUL 字符)的 ASCII 码为 0,在或中^@查看时显示为。viless

当我几乎没有磁盘空间并且进程正在尝试写入日志文件时,我通常会看到这些。

于 2013-07-05T09:43:04.940 回答