IOError: [Errno 22] invalid mode ('w') or filename
IOError: [Errno 22] invalid mode ('w') or filename
我在尝试创建文件时遇到此错误。它被设计为获取创建的 .csv 文件并将其放入纯文本文件。
我希望它在 运行 带有日期和时间戳后创建一个新文件,但我似乎在尝试生成文件时收到 Errno 22。
有什么想法吗?
import csv
import time
f = open(raw_input('Enter file name: '),"r")
saveFile = open ('Bursarcodes_'+time.strftime("%x")+ '_'+time.strftime("%X")+
'.txt', 'w+')
csv_f = csv.reader(f)
for row in csv_f:
saveFile.write( 'insert into bursarcode_lookup(bursarcode, note_id)' +
' values (\'' + row[0] + '\', ' + row[1] + ')\n')
f.close()
saveFile.close()
您的文件名中不能包含斜杠 (/
) 和冒号 (:
,但在 Unix 中允许),但它们正是 strftime
在其输出中生成的内容。
Python 试图帮助你,它说:
No such file or directory: 'Bursarcodes_01/09/15_19:59:24.txt'
将time.strftime("%x")
替换为:
time.strftime("%x").replace('/', '.')
...和 time.strftime("%X")
与此:
time.strftime("%X").replace(':', '_')
清理和扩展版本:
import csv
import sys
import time
def make_output_fname():
# Thanks to @Andrew:
return time.strftime("Bursarcodes_%x_%X.txt").replace("/", "-").replace(":", "-")
def main(csv_fname=None, outfname=None, *args):
if not csv_fname:
# first arg not given - prompt for filename
csv_fname = raw_input("Enter .csv file name: ")
if not outfname:
# second arg not given - use serialized filename
outfname = make_output_fname()
with open(csv_fname) as inf, open(outfname, "w") as outf:
incsv = csv.reader(inf)
for row in incsv:
outf.write(
"insert into bursarcode_lookup(bursarcode, note_id) values ('{0}', '{1}')\n"
.format(*row)
)
if __name__=="__main__":
# pass any command-line arguments to main()
main(*sys.argv[1:])
您现在也可以从命令行 运行 它。
请注意,如果您的 csv 文件中的任何数据项包含未转义的单引号 ('
),您将无效 sql。
我在尝试创建文件时遇到此错误。它被设计为获取创建的 .csv 文件并将其放入纯文本文件。
我希望它在 运行 带有日期和时间戳后创建一个新文件,但我似乎在尝试生成文件时收到 Errno 22。
有什么想法吗?
import csv
import time
f = open(raw_input('Enter file name: '),"r")
saveFile = open ('Bursarcodes_'+time.strftime("%x")+ '_'+time.strftime("%X")+
'.txt', 'w+')
csv_f = csv.reader(f)
for row in csv_f:
saveFile.write( 'insert into bursarcode_lookup(bursarcode, note_id)' +
' values (\'' + row[0] + '\', ' + row[1] + ')\n')
f.close()
saveFile.close()
您的文件名中不能包含斜杠 (/
) 和冒号 (:
,但在 Unix 中允许),但它们正是 strftime
在其输出中生成的内容。
Python 试图帮助你,它说:
No such file or directory: 'Bursarcodes_01/09/15_19:59:24.txt'
将time.strftime("%x")
替换为:
time.strftime("%x").replace('/', '.')
...和 time.strftime("%X")
与此:
time.strftime("%X").replace(':', '_')
清理和扩展版本:
import csv
import sys
import time
def make_output_fname():
# Thanks to @Andrew:
return time.strftime("Bursarcodes_%x_%X.txt").replace("/", "-").replace(":", "-")
def main(csv_fname=None, outfname=None, *args):
if not csv_fname:
# first arg not given - prompt for filename
csv_fname = raw_input("Enter .csv file name: ")
if not outfname:
# second arg not given - use serialized filename
outfname = make_output_fname()
with open(csv_fname) as inf, open(outfname, "w") as outf:
incsv = csv.reader(inf)
for row in incsv:
outf.write(
"insert into bursarcode_lookup(bursarcode, note_id) values ('{0}', '{1}')\n"
.format(*row)
)
if __name__=="__main__":
# pass any command-line arguments to main()
main(*sys.argv[1:])
您现在也可以从命令行 运行 它。
请注意,如果您的 csv 文件中的任何数据项包含未转义的单引号 ('
),您将无效 sql。