【问题标题】:IOError: [Errno 22] invalid mode ('w') or filenameIOError: [Errno 22] 无效模式 ('w') 或文件名
【发布时间】:2015-01-09 17:53:30
【问题描述】:

我在尝试创建文件时遇到此错误。它的设计目的是获取创建的 .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()

【问题讨论】:

  • time.strftime("%X") 返回类似'12:57:03' 的字符串。您确定您的操作系统允许文件名中包含冒号吗?同样,%x 会得到你'01/09/15'。您是否已经设置了目录“Bursarcodes_01”和“09”,其中将包含您的“15_12:57:03.txt”文件?
  • 这正是问题所在。在进行更正后,它就像一个魅力。

标签: python python-2.7 errno


【解决方案1】:

文件名中不能包含斜杠(/)和冒号(:,但在 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(':', '_')

【讨论】:

  • 哇,感谢您的快速响应,效果很好!
  • @SergeProtector 很高兴它有帮助!
【解决方案2】:

经过清理和扩展的版本:

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。

【讨论】:

  • 哇,这令人印象深刻。如果您无法从我的代码中分辨出来,那么现在肯定知道我是 Python 的完整初学者。我会玩这个感谢您的帮助。
猜你喜欢
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多