打开文件作为读/写(如果存在)或不存在的最佳方法是什么,然后创建它并将其作为读/写打开?从我读到的,file = open('myfile.dat', 'rw')应该这样做,对吧?
它不适合我(Python 2.6.2),我想知道它是否是一个版本问题,或者不应该像那样或什么工作.
最重要的是,我只需要解决问题的方法.我很好奇其他的东西,但我需要的只是一个很好的方式来做开场部分.
更新:封闭目录可由用户和组写入,而不是其他(我在Linux系统上...所以权限775换句话说),确切的错误是:
IOError:没有这样的文件或目录.
在内置的蟒蛇开放的功能,是个什么模式之间准确的区别w,a,w+,a+,和r+?
特别是,文档暗示所有这些都允许写入文件,并说它打开文件"具体"附加",写入"和"更新",但没有定义这些术语的含义.
我试着r+和a+打开文件和读取和写入,但"R +"和"A +"都是STR附加到文件末尾.
那么,r+和之间的区别是a+什么?
加:
我找到了原因:
我已经读取了文件对象,忘了寻找(0)将位置设置为开始
是os.mknod()Mac上的特权电话吗?它总是失败,不允许操作?
In [1]: import os
In [2]: os.mknod("/tmp/test123")
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-2-1b8032a076af> in <module>()
----> 1 os.mknod("/tmp/test123")
OSError: [Errno 1] Operation not permitted
Run Code Online (Sandbox Code Playgroud) 我有一个将运行多次的脚本,该脚本的主函数中的第一行是这样的:
def main():
users_csv_file_init()
Run Code Online (Sandbox Code Playgroud)
这个函数应该做的是创建一个 CSV 文件并附加列的名称,如果这样的文件不存在,如果存在,它不应该执行任何操作。我写的是这样的:
def users_csv_file_init():
with open("users.csv", 'a+') as output_file:
writer = csv.writer(output_file)
writer.writerow(["userid", "username", "fname", "lname", "uuid"])
Run Code Online (Sandbox Code Playgroud)
这会失败,因为每次我运行脚本时它都会创建一个新行(列的名称),并且这是有道理的,因为a+如果文件不存在则创建文件并以附加模式打开它。但我无法更改为w+任何一个,因为这会删除文件中以前的所有内容。从 , only和的模式来看open(),如果文件不存在,则似乎创建该文件。w+a+
我可以手动检查文件是否存在,如下所示:
def users_csv_file_init():
if not os.path.exists("users.csv"):
with open("users.csv", 'w') as output_file:
writer = csv.writer(output_file)
writer.writerow(["userid", "username", "fname", "lname", "uuid"])
Run Code Online (Sandbox Code Playgroud)
但我被告知这样做是不符合Python标准的,并且容易出现竞争条件。我怎样才能正确地做到这一点?