写入文件时,某些字符不会显示

时间:2013-11-21 19:08:32

标签: python file-io

我有一个Python脚本需要3个值,并在SQL文件中写入一行以将这些值插入数据库。有人告诉我,我可能不会使用csv编写器。假设我有

sqlfile = open("./sqlfile.sql", "wb")

我用来写插入行的命令如下:

line = "insert into `mytable`(`value1`,`value2`,`value3`) values (\"" + variable1 + "\",\"" + variable2 + "\",\"" + variable3 + "\");\n"
sqlfile.write(line)

(值得注意的是,这三个都是字符串值)对于这个例子,我将设置variable1 = AAA,variable2 = BBB,以及variable3 = CCC。运行时,脚本打印如下:

insert into `mytable`(`value1``value2``value3`) values ("AAA"BBBCCC);

换句话说,没有逗号打印。更令人沮丧的是,引号DO打印,但只有第一组 - 第二组和第三组被忽略,就像逗号一样。我还尝试过variable1 + "\"" + "," + "\"" + variable2以及\之类的内容,而不只是,,但这也不起作用。令人沮丧的是我已经写了这个项目中的其他文件,并使用逗号和引号,它之前有用。我是Python的新手,特别是使用它来写入和从文件写入,所以我无法弄清楚为什么会发生这种情况。我对网络的初步搜索也没什么帮助。有人有建议吗?谢谢!

另外,我尝试过一次写一个部分,但这也不起作用。

2 个答案:

答案 0 :(得分:1)

这条粘贴在这里的行是正确的。

您可以在repl.it看到它正在运行。输出是:

Python 2.7.2 (default, Jul 20 2011, 02:32:18)
[GCC 4.2.1 (LLVM, Emscripten 1.5, Empythoned)] on linux2

insert into `mytable`(`value1`,`value2`,`value3`) values ("AAA","BBB","CCC");

但是,在您的实际代码中,有很多方法可能会出现这种错误,几乎无法发现,因为您选择了可读性最低(也是可写)的方法来执行此操作。

如果要在字符串中包含双引号,而不是转义引号,只需使用单引号字符串:

line = 'insert into `mytable`(`value1`,`value2`,`value3`) values ("' + variable1 + '","' + variable2 + '","' + variable3 + '");\n'

或者,更好的是,摆脱字符串连接,这样你就不必用引号内的引号来处理所有那些短字符串:

line = 'insert into `mytable`(`value1`,`value2`,`value3`) values ("{}","{}","{}");\n'.format(variable1, variable2, variable3)

这些更改都没有解决您发布的代码中的问题,因为 在您当前的代码中没有问题。但它很可能会解决您实际代码中的问题,因为您在实际代码中可能出现的许多错误将更难以制作,如果您确实犯了错误,则更容易发现错误。

答案 1 :(得分:-3)

也许尝试关闭文件? 或者甚至更好,使用上下文管理器?

with open(<path>, <mode>) as f:
    f.write("abc")

如果您不知道这意味着什么 - 请尝试谷歌搜索。