我從昨天開始使用googling這個問題並無濟於事;在python2.7中通過目錄中的文件循環讀取文件時出錯
當我遍歷一個目錄中的多個文件,並處理該循環中每個文件的行時,我總是關閉,但好像python打開了同一個內存空間中的所有文件,所以當我循環遍歷一個文件,我從先前打開的文件中檢索所有記錄,就好像它們在一個指針數組中。 。 。 .wtf?
import os
import sys
import glob
import string
import cPickle
path2 = './'
columnShuffleTable = loadColumnTable('myTable') #func previously defined
codeScrambleTable = loadScrambleTable('theirTable') #func previously defined
pathToFiles2 = glob.glob(os.path.join(path2, '*.DAT'))
for curFile in pathToFiles2:
_list = ['',]
#this is the variable with which I'm having a problem
unscrambledCodes = file(curFile[-10:], 'r')
#this always yields the actual first line of the file at which I am currently at
line = unscrambledCodes.readline()
_list[0] = '|' + line.strip() #stripping trailing spaces
#the list length at this point always equates to '1', so up to here everything is great
print "list length:", len(_list)
# this always reads the 2nd line of the very first file I loaded. . .wtf?
line = unscrambledCodes.readline().strip()
while(line):
#for unscrambledCodes [my input file]
print "len list: ", len(_list), "infile", unscrambledCodes
nextLine = unscrambledCodes.readline().strip()
if not nextLine:
_list.append('|' + line)
break
else:
_list.append('|' + line[:-14] + scrambleCode(line[-12:], columnShuffleTable, codeScrambleTable))
#end if
line = nextLine
unscrambledCodes.close()
outfile = open(curFile[-10:-4] + '.Scrambled', 'w')
output = '\n'.join(_list)
outfile.write(output)
outfile.close()
的要求,這裏是我的I/O樣本:
輸入文件1:
AB00007737106517 COSTCLASSU275
C000000010031932155750539976333693187714
C000000010031932155750539976105307608239
文件2:
AB00007736638744 COSTCLASSU275
C00000001003028490769901248060 8351468369
C000000020030284907699012480751885101503
file3的:
AB00007737148207 COSTCLASSU275
C000000010032271716759259098738354718484
C000000020032271716759259098394986919513
期望的輸出文件1:
AB00007737148207 COSTCLASSU275
| C000000010031932155750539976079292077121
| C000000010031932155750539976126217711213
文件2:
AB00007736638744 COSTCLASSU275
| C000000010030284907699012480968864628712
| C000000020030284907699012480294550195814
文件3:
AB00007737106517 COSTCLASSU275
| C000000010032271716759259098216262704445
| C000000020032271716759259098085462231948
電流輸出文件1:
AB00007737148207 COSTCLASSU275
| C000000010031932155750539976079292077121
| C000000010031932155750539976126217711213
文件2:
AB00007736638744 COSTCLASSU275
| C000000010031932155750539976079292077121
| C000000010031932155750539976126217711213
。
。
。
| C000000010030284907699012480968864628712
| C000000020030284907699012480294550195814
文件3:
AB00007737106517 COSTCLASSU275
| C000000010031932155750539976079292077121
| C000000010031932155750539976126217711213
。
。
。
| C000000010030284907699012480968864628712
| C000000020030284907699012480294550195814
。
。
。
| C000000010032271716759259098216262704445
| C000000020032271716759259098085462231948
氏這似乎是**與陳述**所設計的那種東西。即抓取所有文件名的列表,並在聲明中打開每個文件... –
正如我寫的,我不明白爲什麼unscrambledCodes不會爲第二個'readline()'做正確的事情。也許顯示一些實際的產出,以及你的預期有助於澄清實際問題是什麼? – jszakmeister
@jszakmeister你不知道我想怎麼做,但數據是如此敏感,我會被解僱:-(,可能會被送到法院 – pythonian29033