簡體   English   中英

如何刪除特定於文件的消息? 蟒蛇

[英]How can remove a message specific of a file? python

這是我的代碼:

old_stdout = sys.stdout
pymol.finish_launching()
log_file=open('loops.log', "w")
sys.stdout = log_file

def myfunc(resi):
    print '%s' % (resi)

file= '%s'%model_initial
x= pymol.cmd.load (file, 'r')

myspace = {'myfunc': myfunc}
d= pymol.cmd.iterate('(ss l)', 'myfunc(resi)', space=myspace)
print d

pymol.cmd.quit()
sys.stdout = old_stdout
log_file.close()

old_stdout = sys.stdout
pymol.finish_launching()
log_file=open('list.log', "w")
sys.stdout = log_file

infile = 'loops.log'
outfile = 'loops1.log'

try:

delete_list = [ "Adjusting settings to improve performance for Intel cards."]
    fin = open(infile)
    fout = open(outfile, "w+")
    for line in fin:
        for word in delete_list:
            line = line.replace(word, "")
        fout.write(line)
    fin.close()
    fout.close()

    outfile = infile

except:
    infile = infile


with open(INFILE) as f:
    lines = f.read().splitlines()
    lines = lines
    lines=lines[:-1]
    lines=map(int, lines)  #Convert str list to int list
    lines=lines[:-1]
    lines=map(int, lines)  #Convert str list to int list

def group_runs(li,tolerance=2):
    out = []
    last = li[0]
    for x in li:
        if x-last > tolerance:
            yield out
            out = []
        out.append(x)
        last = x
    yield out

print list(group_runs(lines))

sys.stdout = old_stdout
log_file.close()

old_stdout = sys.stdout
pymol.finish_launching()
log_file=open('list.log', "w")
sys.stdout = log_file

fhand=open('list.log')
for lines in fhand:
    print lines

for k, g in groupby(enumerate(lines), lambda (i,x):i-x):
            ranges = []
            group = map(itemgetter(1), g)
            ranges.append((group[0], group[-1]))
            print ranges

sys.stdout = old_stdout
log_file.close()

文件loops.log,是一個包含許多數字的文件(選擇模型初始化,並且此CODE的函數主體將它們分組,例如:

1

2

3

4

8

9

11

15

他們分組:

(1,4)

(8,9)

(11,11)

(15,15)

這個CODE有效,但是,當文件有很多數字時,我有這樣的信息:

Traceback (most recent call last):
  File "./automaticvF.py", line 232, in <module>
    lines=map(int, lines)  #Convert str list to int list
ValueError: invalid literal for int() with base 10: 'Adjusting settings to improve performance for Intel cards.

並且日志是白色的。 我認為更容易刪除我的文件loops.log的消息,並更改文件的名稱。 只有當有很多很多的數字要分組時才會發生這種情況,但是當我有80個數字時,沒問題。 那么我可以在這個CODe中改變什么,使用變量infile,這取決於消息是否在infile old?

有人可以幫幫我嗎?

謝謝

您無需通過更改sys.stdout將流程的標准輸出重定向到文件,而是需要直接將數據寫入文件。 你可以這樣做,例如,像這樣:

print >> log_file, '%s' % (resi)

或者像這樣:

log_file.write(str(resi))

這將確保您的文件不包含恰好打印到標准輸出的隨機無關數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM