亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 for 循環向表中添加新行:python

使用 for 循環向表中添加新行:python

喵喵時光機 2023-05-16 15:49:40
在搜索兩個正則表達式的 DNA 序列后,我試圖創建一個 .bed 文件。理想情況下,我想生成一個制表符分隔的文件,其中包含序列描述、第一個正則表達式的起始位置和第二個正則表達式的結束位置。我知道正則表達式部分有效,它只是創建了我正在努力處理的 \t 分隔文件。我希望我可以打開/創建一個文件并簡單地為for loop包含此信息的每次迭代打印一個新行,如下所示:with open("Mimp_hits.bed", "a+") as file_object:    for line in file_object:        print(f'{sequence.description}\t{h.start()}\t{h_rc.end()}')file_object.close()但這似乎不起作用(創建空文件)。我也嘗試過使用file_object.write,但這同樣會創建一個空文件。這是我所有的代碼,包括搜索正則表達式:import re, sysfrom Bio import SeqIOfrom Bio.SeqRecord import SeqRecordinfile = sys.argv[1]for sequence in SeqIO.parse(infile, "fasta"):    hit = re.finditer(r"CAGTGGG..GCAA[TA]AA", str(sequence.seq))    mimp_length = 400    for h in hit:        h_start = h.start()        hit_rc = re.finditer(r"TT[TA]TTGC..CCCACTG", str(sequence.seq))        for h_rc in hit_rc:            h_rc_end = h_rc.end()            length = h_rc_end - h_start            if length > 0:                if length < mimp_length:                    with open("Mimp_hits.bed", "a+") as file_object:                        for line in file_object:                            print(sequence.description, h.start(), h_rc.end())                    file_object.close()這是所需的輸出:Focub_II5_mimp_1__contig_1.16(656599:656809)    2   208Focub_II5_mimp_2__contig_1.47(41315:41540)  2   223Focub_II5_mimp_3__contig_1.65(13656:13882)  2   224Focub_II5_mimp_4__contig_1.70(61591:61809)  2   216這是示例輸入:>Focub_II5_mimp_1__contig_1.16(656599:656809)TACAGTGGGATGCAAAAAGTATTCGCAGGTGTGTAGAGAGATTTGTTGCTCGGAAGCTAGTTAGGTGTAGCTTGTCAGGTTCTCAGTACCCTATATTACACCGAGATCAGCGGGATAATCTAGTCTCGAGTACATAAGCTAAGTTAAGCTACTAACTAGCGCAGCTGACACAACTTACACACCTGCAAATACTTTTTGCATCCCACTGTA>Focub_II5_mimp_2__contig_1.47(41315:41540)TACAGTGGGAGGCAATAAGTATGAATACCGGGCGTGTATTGTTTTCTGCCGCTAGCCCATTTTAACAGCTAGAGTGTGTATATTAACCTCACACATAGCTATCTCTTATACTAATTGGTTAGGGAAAACCTCTAACCAGGATTAGGAGTCAACATAGCTTGTTTTAGGCTAAGAGGTGTGTGTCAGTACACCAAAGGGTATTCATACTTATTGCCCCCCACTGTA有人能幫忙嗎?
查看完整描述

2 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

要向文件中寫入一行,您需要執行以下操作:

with?open("file.txt",?"a")?as?f:?
???print("new?line",?file=f)

如果你想用制表符分隔你也可以添加sep="\t",這就是為什么 python 3 做了print一個函數所以你可以使用sep,?end,?file, 和flush關鍵字參數。:)

打開文件進行附加意味著文件指針從文件末尾開始,這意味著寫入它不會覆蓋任何數據(附加到文件末尾)并迭代它(或以其他方式讀取它)給出沒有什么比你已經到達文件末尾更重要的了。

因此,您無需遍歷文件的行,而只需向其中寫入一行:

????????????????with?open("Mimp_hits.bed",?"a")?as?file_object:?
???????????????????????????????????print(sequence.description,?h.start(),?h_rc.end(),?file=file_object)

您還可以考慮只在循環開始附近打開文件,因為打開它一次并寫入多次比多次打開它更有效,而且 with 塊會自動關閉文件,因此無需顯式執行此操作。


查看完整回答
反對 回復 2023-05-16
?
桃花長相依

TA貢獻1860條經驗 獲得超8個贊

您正在嘗試以“a+”模式打開文件,并從中循環遍歷行(這將找不到任何內容,因為當您這樣做時文件位于末尾)。在任何情況下,如果這只是一個輸出文件,那么您將以“a”模式打開它以附加到它。


可能您只想打開文件一次以進行追加,并在with語句內部執行主循環,file_object.write(...)在您真正想將字符串追加到文件時使用。file_object.close()請注意,使用此構造時不需要 for with。


with open("Mimp_hits.bed", "a") as file_object:

    for sequence in SeqIO.parse(infile, "fasta"):

        # ... etc per original code ...

                    if length < mimp_length:

                        file_object.write("{}\t{}\t{}\n".format(

                                sequence.description, h.start(), h_rc.end()))


查看完整回答
反對 回復 2023-05-16
  • 2 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號