python3函数读取文件写入文件默认覆盖文件

时间:2018-03-07 15:19:01

标签: python python-3.x function input output

我想创建一个函数,读取txt文件,删除每行的前导空格和尾随空格,然后写入文件,默认覆盖我读入的文件,但是可以选择写入新文件。 这是我的代码。

def cleanfile(inputfile, outputfile = inputfile):
    file1 = open(inputfile,'r')
    file2 = open(outputfile, 'w')
    lines = list(file1)
    newlines = map(lambda x: x.strip(), lines)
    newlines = list(newlines)
    for i in range(len(newlines)):
        file2.write(newlines[i] + '\n')
    file1.close()
    file2.close()    
cleanfile('hw.txt',)
cleanfile('hw.txt','hw_2.txt')

但它给了我错误。 NameError:name' inputfile'未定义

如何解决这个问题并实现我的目标?非常感谢你。

2 个答案:

答案 0 :(得分:0)

Python中的标准约定是使用None作为默认值并检查它。

def cleanfile(inputfile, outputfile = None):
    if outputfile is None:
        outputfile = inputfile
    file1 = open(inputfile,'r')
    file2 = open(outputfile, 'w')
    lines = list(file1)
    newlines = map(lambda x: x.strip(), lines)
    newlines = list(newlines)
    for i in range(len(newlines)):
        file2.write(newlines[i] + '\n')
    file1.close()
    file2.close()    
cleanfile('hw.txt',)
cleanfile('hw.txt','hw_2.txt')

答案 1 :(得分:-1)

您不能将outputfile = inputfile设置为默认参数。这是Python的限制 - ' inputfile'在指定默认参数时,它不作为变量存在。

您可以使用哨兵值:

sentinel = object()
def func(argA, argB=sentinel):
    if argB is sentinel:
       argB = argA
    print (argA, argB)

func("bar")           # Prints 'bar bar'
func("bar", None)     # Prints 'bar None'