0

我正在将我在 Windows 环境中编写的一些 Python 脚本转换为在 Unix(Red Hat 5.4)中运行,并且在转换处理文件路径的行时遇到了麻烦。在 Windows 中,我通常使用以下方式读取目录中的所有 .txt 文件:

pathtotxt = "C:\\Text Data\\EJC\\Philosophical Transactions 1665-1678\\*\\*.txt"
for file in glob.glob(pathtotxt):

似乎也可以在 Unix 中使用 glob.glob() 方法,所以我正在尝试实现此方法以使用以下代码在名为“source”的目录中查找所有文本文件:

#!/usr/bin/env python
import commands
import sys
import glob
import os

testout = open('testoutput.txt', 'w')
numbers = [1,2,3]
for number in numbers:
    testout.write(str(number + 1) + "\r\n")
testout.close

sourceout = open('sourceoutput.txt', 'w')
pathtosource = "/afs/crc.nd.edu/user/d/dduhaime/data/hill/source/*.txt"
for file in glob.glob(pathtosource):
    with open(file, 'r') as openfile:
        readfile = openfile.read()
        souceout.write (str(readfile))
sourceout.close

当我运行此代码时,testout.txt 文件按预期出现,但 sourceout.txt 文件为空。我认为如果我改变线路,问题可能会解决

pathtosource = "/afs/crc.nd.edu/user/d/dduhaime/data/hill/source/*.txt"

pathtosource = "/source/*.txt"

然后从 /hill 目录运行代码,但这并没有解决我的问题。其他人知道我如何能够读取源目录中的文本文件吗?对于其他人可以提供的任何见解,我将不胜感激。

编辑:如果相关,上面引用的目录 /afs/ 树位于我通过 Putty SSH 进入的远程服务器上。我还使用 test.job 文件来 qsub 上面的 Python 脚本。(这一切都是为了让自己在 SGE 集群系统上提交作业。) test.job 脚本如下所示:

#!/bin/csh
#$ -M dduhaime@nd.edu
#$ -m abe
#$ -r y
#$ -o tmp.out
#$ -e tmp.err
module load python/2.7.3
echo "Start - `date`"
python tmp.py 
echo "Finish - `date`"
4

2 回答 2

2

知道了!我拼错了输出命令。我写

souceout.write (str(readfile))

代替

sourceout.write (str(readfile))

真是个笨蛋。我还在该行中添加了一个换行符:

sourceout.write (str(readfile) + "\r\n")

它工作正常。我认为是时候使用新的 IDE 了!

于 2013-09-01T16:03:26.603 回答
1

你还没有真正关闭文件。testout.close()没有调用该函数,因为您忘记了括号。同样适用于sourceout.close()

testout.close
...
sourceout.close

必须:

testout.close()
...
sourceout.close()

如果程序完成,所有文件都会自动关闭,因此只有重新打开文件才重要。
更好的(pythonic 版本)是使用该with语句。而不是这个:

testout = open('testoutput.txt', 'w')
numbers = [1,2,3]
for number in numbers:
    testout.write(str(number + 1) + "\r\n")
testout.close()

你会这样写:

with open('testoutput.txt', 'w') as testout:
    numbers = [1,2,3]
    for number in numbers:
        testout.write(str(number + 1) + "\r\n")

在这种情况下,即使发生错误,文件也会自动关闭。

于 2013-09-01T15:19:53.677 回答