我需要逐行处理Python(大约1GB)的大文件。 我用这种方法来做到这一点:
i
if(isset($_POST['submit'])) { //kada kliknu dugme submit
if(!empty($nameX) || !empty($passX)) {
if($XX == true) {
if($passX == GetPlayerPassword($nameX)) {
echo "Dobrodosli nazad!";
header( 'Location: http://www.youtube.com/' );
}
else {
header( 'Location: ../main.php' );
}
}
else {
global $handler;
echo "Novi account registrovan! Dobrodosli!";
$tmpQuery = "INSERT INTO registrovani (Username, Password) VALUES ('".$nameX."','".$passX."')";
mysqli_query($handler,$tmpQuery);
}
}
else if(empty($nameX) || empty($passX)){
header( 'Location: ../main.php' );
}
}
的值(迭代次数=文件的行数)为19,991,889。
但该文件(使用EmEditor打开)报告该文件有63,941,070行。
为什么线条数不匹配?我做错了什么?
感谢。
答案 0 :(得分:0)
我可以想到两种可能性。
说明:以文本模式打开文件。 3.x使用与OS无关的通用换行符并且使用' \ r'和' \ r \ n'转换为' \ n'。 2.x使用依赖于操作系统的阅读,在Windows上,只有' \ r \ n'使用。
示例:
with open('tem.dat', 'wb') as f:
f.write(b'a\rb\r\nc\n\rd\n')
with open('tem.dat', 'r') as f:
for i, t in enumerate(f):
print(i, t, repr(t[-1]))
3.x打印
0 a
'\n'
1 b
'\n'
2 c
'\n'
3
'\n'
4 d
'\n'
2.x打印
(0, 'a\rb\n', "'\\n'")
(1, 'c\n', "'\\n'")
(2, '\rd\n', "'\\n'")
诊断:添加到您的代码"如果' \ r'在fline中:print(fline)"在处理之前。
答案 1 :(得分:0)
数字不匹配,因为open
函数使用的编码对于此文件不正确,请尝试使用“ISO-8859-1”编码。