python脚本windows路径

时间:2014-12-04 07:17:55

标签: python windows

我有一个似乎没有打开文件的python脚本。 脚本中的文件夹定义如下:

logdir = "C:\\Programs\\CommuniGate Files\\SystemLogs\\"
submitdir = "C:\\Programs\\CommuniGate Files\\Submitted\\"

这是路径的使用方式:

        filenames = os.listdir(logdir)
        fnamewithpath = logdir + fname

我在Windows 7 sp1中运行此脚本 这看起来是否正确? 我可以在代码中调试它以确保文件正在打开吗?

谢谢,

Docfxit

编辑提供更多说明:

打开和关闭文件的实际代码如下:

# read all the log parts
for fname in logfilenames :
    fnamewithpath = logdir + fname

    try :
        inputFile = open(fnamewithpath, "r")

    except IOError as reason :
        print("Error: " + str(reason))
        return

    if testing :
        print("Reading file '%s'" % (fname))

    reporter.munchFile(inputFile)
    inputFile.close()

# open output file
if testing :
    outfilename = fullLognameWithPath + ".summary"
    fullOutfilename = outfilename

else :
    outfilename = submitdir + "ls" + str(time.time()) + "-" + str(os.getpid())
    fullOutfilename = outfilename + ".tmp"

try :
    outfile = open(fullOutfilename, "w")

except IOError :
    print("Can't open output file " + fullOutfilename)
    return

if not testing :

    # add the mail headers first
    outfile.write("To: " + reportToAddress + "\n")
    outfile.write("From: " + reportFromAddress + "\n")
    outfile.write("Subject: CGP Log Summary new for " + logname + "\n")

    if useBase64 :
        outfile.write("Content-Transfer-Encoding: base64\n")
    outfile.write("\n")

# save all this as a string so that we can base64 encode it
outstring = ""
outstring += "Summary of file: " + fullLogname + partAddendum + "\n"
outstring += "Generated " + time.asctime() + "\n"
outstring += reporter.generateReport()

if useBase64 :
    outstring = base64.encodestring(outstring)
outfile.write(outstring)
outfile.close()

if not testing :
    # rename output file to submit it
    try :
        os.rename(outfilename + ".tmp", outfilename + ".sub")
    except OSError :
        print("Can't rename mail file to " + outfilename + ".sub")

我原本想知道路径中包含的双反斜杠是否正确。 我无法弄清楚为什么它没有正确地产生输出。

以防万一有人想看到我发布的整个脚本: 上半场是:

http://pastebin.ws/7ipf3

下半场是:

http://pastebin.ws/2fuu3n

太大了,无法将所有内容发布在一起。

这是在Python 3.2.2中运行

非常感谢您的关注,

Docfxit

1 个答案:

答案 0 :(得分:0)

上面写的代码实际上并没有打开任何一个文件。

os.listdir返回指定路径中的文件列表(技术上条目,因为还包括...等非文件),但实际上并没有打开它们。为此,您需要在其中一条路径上调用open函数。

如果您想在filenames中打开 write 的所有文件,可以执行以下操作:

fileList = []
for f in filenames:
    if os.path.isfile(fullPath):
        fullPath = os.path.join(logdir, f)
        fileList.append(open(fullPath, 'w')

在此之后,列表fileList将包含所有文件的打开文件句柄,然后可以迭代(例如,如果要复用输出,则全部写入)。 / p>

注意,完成后,您应该循环遍历列表并明确close它们全部(自动关闭它们的with语法在动态大小的列表中具有额外的复杂性/限制,并且最好避免在这里,IMO)。

有关文件的更多信息,请参阅: Reading and Writing Files

此外,最好使用os.path.join来组合路径的组件。这样它就可以在支持的平台上移植,并且会自动使用正确的路径分隔符等。

根据OP的评论进行编辑:

我建议你使用调试器逐步查看代码,看看究竟出了什么问题。我使用pudb,这是一个增强的命令行调试器,并发现它非常有价值。您可以通过 pip 将其安装到您的system / virtualenv Python环境中。