我有一些生成文件的javascript代码,然后需要将其保存在服务器端以供Python脚本进一步处理。
我的javascript创建了一个字符串,在该字符串中我使用'\ n'来分隔行,然后我将该字符串提供给PHP文件以保存为文本文件。
我的问题是当我在vi中打开文件时,它在每行的末尾显示^ M,这会混淆python。我已经尝试让python生成一行的子串而不是最后的^ M,但Python不会这样做。
所以当我调试时,我的javascript字符串看起来像这样:
line1
line2
line3
但保存的文件如下所示:
line1^M
line2^M
line3^M
这是我的javascript:
for(var i = 0;i < existingList.length;i++){
console.log(existingList.options[i].value);
saveString += existingList.options[i].value + '\n';
}
saveToFile(saveString);
function saveToFile(saveString){
var data = new FormData();
data.append("data" , saveString);
var xhr = new XMLHttpRequest();
xhr.open( 'post', 'savefile.php', true );
xhr.send(data);
}
这是我的PHP:
<?php
if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = "Cards.txt";
$file = fopen($fname, 'w');//creates new file
fwrite($file, $data);
fclose($file);
}
?>
我尝试过转换为UTF8,我尝试过String.fromCharCode(13)而不是'\ n',我尝试删除Python中的^ M ...任何想法?
SOLUTION:
在python中我使用
lines = text_file.read().split('\r')
或:
lines = text_file.read().split('\n')
我发现如果你使用分割线,它会自动处理行尾:
lines = text_file.read().splitlines()
答案 0 :(得分:1)
对新行“\ n”使用双引号而不是'\ n'
答案 1 :(得分:1)
尝试替换您的代码行:
saveString += existingList.options[i].value + '\n';
使用:
saveString += existingList.options[i].value + "\n";
OR with:
saveString += existingList.options[i].value + "\r\n";
您只能使用"\n"
,"\r\n"
,因为使用单引号无效。
您可以在使用该文件之前使用php
编辑文件或内容,将您不想要的内容替换为任何内容,并使用file_get_contents()
和{{1保存文件},file_put_contents()
这不是pyton,但您可能想尝试使用str_replace()
来修复它,因为您可以在使用该文件之前进行修复..
有多种方法可以做到这一点,这是..
php
示例:
str_replace()
我希望这会带你走向正确的方向
答案 2 :(得分:0)
我测试了jagb的解决方案,它们似乎都没有工作,但它让我思考python如何读取文件。我终于找到了答案:
在python中我使用
lines = text_file.read().split('\r')
或:
lines = text_file.read().split('\n')
我发现如果你使用分割线,它会自动处理行尾:
lines = text_file.read().splitlines()