我正在制作一个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'
将成为输出文件,我建议在文件尚未存在的情况下创建它的代码。在将此代码放入类中之前它已经工作了....
答案 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+')
然后错误就解决了。