我正在使用多个进程同时处理一个 txt 文件(一些读/写操作)。我看到了特殊标志的痕迹 ^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ^@^@^@^@^@ 时不时地分布在一些行中。这说明什么?而这些符号又会在什么情况下出现。这是否意味着一些二进制内容被错误地写入了应该是文本的地方?
更新 我通读了文档。一些人认为这是由于 linux/windows 平台上的换行符问题,而另一些人则认为这是因为网络环境中的大端/小端。事实上,我在网络文件系统中运行多个进程并操作一个通用的 txt 文件。所以我猜编码格式可能是主要原因。谁能建议如何避免这个问题?我不想编辑文件(比如手动进行文本替换)。最好使用一种干净的方式来生成没有任何空字符的正确文件。
更新2 这是实现我的项目的 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)
谢谢
最佳答案
在 ASCII 中,^@
是二进制零 (NUL
) 字符。
在每个 ASCII 字符之间包含 ^@
的数据有时会错误地从 Unicode(4 个字节到一个字符)转换为 ASCII(1 个字节到一个字符),反之亦然。
要删除 ^@
字符,运行 vi file.txt
,然后输入 :%s/
Ctrl+V Ctrl+@ //g
并点击 ↵ Return。
参见 this detailed article获取更多信息。
关于python - ^@ sign in .txt 文件提示什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17485644/