IOError:[Errno 2]没有为ouptup文件显示此类文件或目录错误

时间:2015-08-21 14:58:50

标签: python argparse

我正在制作一个Python代码来处理文本文件。代码将从命令行输入文件和输出文件名以及标志-sort,-verse等接收,根据操作应用于输入文件,最后将数据写入输出文件。我需要在一个类中完成所有这些工作,这样代码就可以继承。到目前为止,我有一个这样的代码:

import argparse  
import random  

class Xiv(object):  

    def __init__(self):  
        parser = argparse.ArgumentParser()  
        group = parser.add_mutually_exclusive_group()  
        group.add_argument("-s", "-sort", action="store_true")  
        group.add_argument("-r", "-reverse", action="store_true")  
        group.add_argument("-sh", "-shuffle", action="store_true")  
        parser.add_argument("inputfile", type = file, help="Input file name")  
        parser.add_argument("outputfile", type = file, help="Output file name")  
        args = parser.parse_args()  
        source =args.inputfile  
        dist = args.outputfile  

    def sort(self):  
     f = open(source, "r")  
     list1 = [line for line in f if line.strip()]  
     f.close()  
     list.sort()  
     with open(dist, 'wb') as fl:  
       for item in list:  
        fl.write("%s" % item)  

    def reverse(self, source, dist):  
     f = open(source, "r")  
     list2 = [line for line in f if line.strip()]  
     f.close()  
     list2.reverse()  
     with open(dist, 'wb') as f2:  
       for item in list2:  
         f2.write("%s" % item)      

def shuffle(self, source, dist):  
    f = open(source, "r")  
    list3 = [line for line in f if line.strip()]  
    f.close()  
    random.shuffle(list3)  
    with open(dist, 'wb') as f3:  
     for item in list3:  
      f3.write("%s" % item)  

x = Xiv();  

现在当我将其作为

运行时
python xiv.py -s text.txt out.txt 

它出现以下错误

IOError: [Errno 2] No such file or directory 'out.txt'  

但是'out.txt'将成为输出文件,我建议在文件尚未存在的情况下创建它的代码。在将此代码放入类中之前它已经工作了....

3 个答案:

答案 0 :(得分:1)

在Python 2中,当我在不存在的文件上调用file时,我收到此错误:

In [13]: file('out.txt')
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-13-d0d554b7d5b3> in <module>()
----> 1 file('out.txt')

IOError: [Errno 2] No such file or directory: 'out.txt'

在Py2中,file相当于open。它会打开一个文件,默认为r模式,因此如果文件不存在,则会出现此错误。

argparse中,type=foo表示使用输入字符串运行函数foo。它并不意味着“将字符串解释为此类对象”。

在您的代码中:

with open(dist, 'wb') as f2:  
   for item in list2:  
       f2.write("%s" % item)

这意味着您希望dist是文件名,字符串。您不希望解析器首先打开文件。你是自己做的。因此,请勿指定type参数。

@tmoreau - Python3删除了file个功能,只留下open

答案 1 :(得分:1)

open函数默认打开一个文件进行读取。你想要的是在写入/创建模式下打开它,如果它不存在它将创建它并允许你写入它:

with open(dist, 'w+') as f3:

第二个参数指定打开模式,默认为'r',这意味着只读。

我不确定为什么它在你进入课堂之前有效 - 从各方面来说,它应该没有区别。

答案 2 :(得分:1)

我收到了这个错误..

  

jemdoc指数   Traceback(最近一次调用最后一次):     文件“/ usr / bin / jemdoc”,第1563行,in       主要()     在主要文件中输入“/ usr / bin / jemdoc”,第1555行       infile = open(inname,'rUb')   IOError:[Errno 2]没有这样的文件或目录:'index.jemdoc'

然后我改变了

infile = open(inname, 'rUb') 

infile = open(inname, 'w+')

然后错误就解决了。