Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中复制部分文本文件时出错_Python_File Io_Text Files - Fatal编程技术网

在python中复制部分文本文件时出错

在python中复制部分文本文件时出错,python,file-io,text-files,Python,File Io,Text Files,我有以下代码将文本文件的一部分复制到新的临时文件中。我正在尝试在与正在复制的文件相同的目录中创建临时文件。所有的print语句都是为了查看它在崩溃之前运行了多远,pdb打印1,然后给出代码下方的错误 def copymp(mptfile): print 1 temp = os.path.dirname(mptfile) + '/mpdata.tmp' print 2 mpfile = open(temp, 'w') print 3 copyline

我有以下代码将文本文件的一部分复制到新的临时文件中。我正在尝试在与正在复制的文件相同的目录中创建临时文件。所有的print语句都是为了查看它在崩溃之前运行了多远,pdb打印
1
,然后给出代码下方的错误

def copymp(mptfile):
    print 1
    temp = os.path.dirname(mptfile) + '/mpdata.tmp'
    print 2
    mpfile = open(temp, 'w')
    print 3
    copyline = False
    for line in mptfile:
        print 4
        if line.startswith('MP'):
            copyline = True
            print 5
        if copyline:
            print 6
            print>>mpfile, line
            copyline = False
    mpfile.seek(1)
    return None

错误:

os.path.dirname()的参数必须是字符串,但您显然正在传入文件对象。(这是有意的吗?)

相反

(旁注:您应该仔细查看得到的回溯。回溯显示错误发生在哪一行–不需要打印语句来隔离错误。在这种情况下,您可以看到调用
os.path.dirname()
失败,因此您应该检查其文档以诊断问题。)尝试在python中使用模块。在原始文件所在的同一目录中创建tempfile是否重要?如果没有,您可以忽略尝试从文件对象获取路径的行,或者按照建议使用:

temp = os.path.dirname(mptfile.name) + '/mpdata.tmp'

无论如何,大多数情况下,您不想自己管理tempfiles,这就是python的tempfile模块存在的原因。

如果第4个print语句执行得那么远,它会给您一个缩进错误。我也不清楚您想做什么。为什么要将copyline设置为true?为什么不直接打印行而不使用copyline变量?@RobVolgman:在编译过程中,甚至在代码开始执行之前,就会出现缩进错误。@RobVolgman复制行部分是多余的,我把它取出来了。它就在那里。所有的指纹都只是为了测试,现在它们都消失了,而且还在工作。
temp = os.path.dirname(mptfile.name) + '/mpdata.tmp'