0

我知道这是基本的,但它已经困扰我一段时间了。我是 Python 编码的新手,所以请耐心等待。

我正在使用 Python 脚本从 MySQL 中读取数据,并将此信息传递给 .txt 文件,使用现有文本文件的第一行作为新文件的名称。所有 MySQL 的东西都工作正常,但我在写入 .txt 文件时遇到问题。代码如下:

import MySQLdb
text_file = open("configure.txt","r")
testCamp = (text_file.readline())
print testCamp
text_file.close()
db = MySQLdb.connect(host='localhost',user='username',passwd='password')
cursor = db.cursor()
cursor.execute("SELECT VERSION()")
disp = cursor.fetchone()
print "Database Version: %s " %disp
db.close()
text_file = open(testCamp, "w")
text_file.write("Some Text\n")

input("\n\nPress Enter to Exit.")

正如您从上面的代码中看到的那样,我正在设置框架,所以我还没有从数据库中获取任何数据。新的 testCamp 文件创建成功(尽管它不显示 .txt 扩展名,而是在它后面有一些不熟悉的框图标)。我检查了文件类型,它确实说它是一个普通的文本文件,我还检查了权限是否允许写入,并且确实如此。有趣的是,我还尝试写入已经存在的文本文件:

text_file = open("Test.txt","w")
text_file.write("Some Text\n")

它仍然没有工作!任何建议,将不胜感激

4

2 回答 2

1

readline流(打开文件)上的方法保留终止换行符"\n",因此如果第一行configure.txttest.txt,您将写入一个名为 的文件"test.txt\n"。利用:

testCamp = testCamp.rstrip()

(在阅读该行之后)删除所有尾随空格(空格、制表符、换行符),或等效地:

testCamp = text_file.readline().rstrip()

write打开到非交互式文件(例如"test.txt"或)的流上的方法"test.txt\n"缓冲(挂起)数据。它被推出——“冲洗”,就像在狩猎时暴露一只鸟(参见flush 的动词形式的含义 3)——通过调用flush方法或关闭流。

上下文管理器将with关闭流(如评论和其他答案中所述)。也可以使用它来读取配置文件(它适用于读取流和写入流)。

于 2013-08-11T10:25:50.033 回答
0

你忘了关闭你的文件!

用这个:

text_file.close()

虽然这很好,但建议您在处理文件 I/O 时使用以下格式:

with open("filename", "mode(s)") as f:
    f.write("Data\n")

所以,在你的情况下,那将是:

with open(testCamp, "w") as text_file:
    text_file.write("Some Text\n")

为什么要使用with?阅读以下:

python“with”语句的设计目的是什么?

更新 1:

根据@SukritKalra 的建议,如果您通过with如图所示使用上下文管理器,则无需关闭文件,这将由您负责。

更新 2:

@Torek 的回答也是正确的,如果你使用readline,你应该在逐字使用它作为文件名之前去掉该行。

于 2013-08-11T10:21:16.890 回答