为何Python读写同一文件程序在Linux与Windows下结果不同?
问题原因与解决方案
1. 路径字符串的转义坑
你写的路径用了普通字符串,里面的\b、\x这类字符会被Python当成转义符解析,导致实际路径和你预期的不一样。比如'D:\xxx\batch_sim_scene\base\CubeMoving.object'里的\b是退格符,根本不是路径里的\base部分,这会导致读取的源文件可能出错,甚至找不到文件。
解决办法:用原始字符串(前面加r)或者双反斜杠\\来写路径:
file_path = r'D:\xxx\batch_sim_scene\base\CubeMoving.object' new_file_path = r'.\CubeMoving.object'
2. 换行符的系统差异
Windows用的换行符是\r\n,Linux是\n。Python的文本读写模式(r/w)会自动适配当前系统:
- Windows下读文件时,把
\r\n转成\n存在lines里,写的时候又转回去成\r\n - Linux下读的时候直接保留
\n,写的时候也输出\n
如果你的软件只认Windows风格的\r\n换行,那Linux生成的文件自然加载失败。
解决办法有两种:
方法一:二进制模式直接复制
用二进制模式(rb/wb)读写,完全不处理换行符,原样复制源文件的所有内容,包括换行和编码,跨系统绝对一致:
file_path = r'D:\xxx\batch_sim_scene\base\CubeMoving.object' new_file_path = r'.\CubeMoving.object' with open(file_path, 'rb') as file: content = file.read() with open(new_file_path, 'wb') as file: file.write(content)
方法二:强制写Windows换行符
在写入时指定newline='\r\n',不管在什么系统,生成的文件都用\r\n换行:
file_path = r'D:\xxx\batch_sim_scene\base\CubeMoving.object' new_file_path = r'.\CubeMoving.object' with open(file_path, 'r', encoding='utf-8') as file: lines = file.readlines() with open(new_file_path, 'w', encoding='utf-8', newline='\r\n') as file: file.writelines(lines)
内容的提问来源于stack exchange,提问作者ZHIHA
相关产品推荐
相关产品推荐

