用错误的行尾编写文件

2024-09-30 04:28:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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。。。有什么想法吗?你知道吗


解决方案:

我用的是python

lines = text_file.read().split('\r')

或:

lines = text_file.read().split('\n')

我发现如果使用splitlines,它会自动处理行尾:

lines = text_file.read().splitlines()

Tags: 文件字符串textnewreaddatavarjavascript
3条回答

尝试替换代码行:

saveString += existingList.options[i].value + '\n';

使用:

saveString += existingList.options[i].value + "\n";

或与:

saveString += existingList.options[i].value + "\r\n";

只能使用"\n""\r\n",因为使用单引号行不通。。你知道吗

你可以在使用文件之前用php编辑文件或内容,将你不想要的内容替换为空,然后用file_get_contents()file_put_contents()保存文件,str_replace()这不是pyton,但是你可以尝试用php修复它,就像你在使用文件之前可以做的那样。。你知道吗

有多种方法可以做到这一点,这是。。你知道吗

str_replace()示例:

<?php
/** More information regarding file_get_contents() - http://php.net/manual/en/function.file-get-contents.php **/
$End_Of_Line = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/path/to/Cards.txt');

/** More information regarding str-replace() - http://php.net/manual/en/function.str-replace.php **/
$End_Of_Line = str_replace('^M', '', $End_Of_Line);
/** Or use $End_Of_Line = str_replace('^M', "\r\n", $End_Of_Line); if you need new lines.. **/

/** More information regarding file_put_contents() - http://php.net/manual/en/function.file-put-contents.php **/
file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/path/to/Cards.txt', $End_Of_Line);
?>

我希望这会把你带到正确的方向

对新行“\n”使用双引号,而不是“\n”

我测试了jagb的解决方案,它们似乎都不起作用,但这让我想到python如何读取文件。我终于找到了答案:

我用的是python

lines = text_file.read().split('\r')

或:

lines = text_file.read().split('\n')

我发现如果使用splitlines,它会自动处理行尾:

lines = text_file.read().splitlines()

相关问题 更多 >

    热门问题