python - ^@ sign in .txt 文件提示什么

标签 python linux file binaryfiles

我正在使用多个进程同时处理一个 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/

相关文章:

python - 我如何将字符串索引转换为整数索引

python - 如何安装 django nonrel 包

linux - 安排本月最后一个星期日的 crontab 作业

Linux/庆典 : Change key category codes within script

c++ - 在 C++ 中,fseek 函数会刷新缓冲区中的数据吗?

php - 如何将一个目录移动到另一个目录?

python - 如何快速不返回加盐密文,而是返回未加盐版本的密文?

python - 如何使用python获取arduino端口

linux - 使用 OpenGL/Mesa3D 的可移植 Linux 编译可执行文件

c - 无法在 C 循环外释放指针?