日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

使用Python文件讀寫,自定義分隔符(custom delimiter)

瀏覽:206日期:2022-07-18 15:35:59

眾所周知,python文件讀取文件的時候所支持的newlines(即換行符),是指定的。這一點不管是從python的doucuments上還是在python的源碼中(作者是參考了python的io版本,并沒有閱讀C版本),都可以看出來:

if newline is not None and not isinstance(newline, str): raise TypeError('illegal newline type: %r' % (type(newline),))if newline not in (None, '', 'n', 'r', 'rn'): raise ValueError('illegal newline value: %r' % (newline,))

好吧,問題來了,如果你恰好是個苦逼的生物狗,正在用python處理所謂的fastq格式的測序結果文件,每次只讀一行往往不是你想要的。Ok, 我們也都知道其實這個問題在Perl里面十分好解決,無非就是重新定義下文件的分割符($/,The input record separator, newline by default. Set undef to read through the end of file.)

local $/; # enable 'slurp' modelocal $_ = <FH>; # whole file now heres/n[ t]+/ /g;

簡單粗暴有效!《Programming Perl》開頭的那些關于什么是happiness定義看來所言非虛,所以你只要需要將$/定義為fastq格式的分隔符就ok了。

但是,如果是Python呢?(容易鉆牛角尖的孩紙,又或者是不喜歡花括號的孩子…..反正就是強行高端了)。終于要進入正題了,OK,在python中又有兩種方式解決這個問題,看你個人喜好選擇了(當然要是有大神知道四種、五種方法,也不妨指導一下我這個小菜鳥)。

方案一的代碼:

import _pyioimport ioimport functoolsclass MyTextWrapper(_pyio.TextIOWrapper): def readrecod(self, sep): readnl, self._readnl = self._readnl, sep self._readtranslate = False self._readuniversal = False try: return self.readline() finally: self._readnl = readnl#class MyTextWrapper(_pyio.TextIOWrapper):# def __init__(self, *args, separator, **kwargs):# super().__init__(*args,**kwargs)# self._readnl = separator# self._readtranslate = False# self._readuniversal = False# print('{}:t{}'.format(self,self._readnl))f = io.open(’data’,mode=’rt’)#f = MyTextWrapper(f.detach(),separator = ’>’)#print(f._readnl)f = MyTextWrapper(f.detach())records=iter(functools.partial(f.readrecod, ’>’), ’’)for r in records: print(r.strip(’>’)) print('###')

Ok,這是Python3.x中的方法(親測),那么在Python2.x中需要改動的地方,目測好像是(沒有親測)

super(MyTextWrapper,self).__init__(*args,**kwargs)

這個方法看上去還是比較elegant,但是efficient 嗎?答案恐怕并不,畢竟放棄了C模塊的速度優勢,但是OOP寫起來還是比較舒服的。對了值得指出的Python的I/O是一個layer一個layer的累加起來的。從這里我們就能看出來。當然里面的繼承關系還是值得研究一下的,從最開始的IOBase一直到最后的TextIOWrapper,這里面的故事,還是要看一看的。

方案二的代碼:

#!/usr/bin/env pythondef delimited(file, delimiter = ’n’, bufsize = 4096): buf = ’’ while True: newbuf = file.read(bufsize) if not newbuf: yield buf return buf += newbuf lines = buf.split(delimiter) for line in lines[:-1]: yield line buf = lines[-1]with open(’data’, ’rt’) as f: lines = delimited(f, ’>’, bufsize = 1) for line in lines: print line, print ’######’

Ok,這里用到了所謂的generator函數,優雅程度也還行,至于效率么,請自行比較和測試吧(畢竟好多生物程序猿是不關心效率的…..)。如此一來,比Perl多敲了好多代碼,唉,懷念Perl的時代啊,簡單粗暴有效,就是幸福的哲學么。

當然還有童鞋要問,那么能不能又elegant還efficient(我可是一個高端的生物程序猿,我要強行高端!)答案是有的,請用Cython! 問題又來了,都Cython了,為什么不直接用C呢?確實,C語言優美又混亂。

補充知識:Python.json.常見兩個錯誤處理(Expecting , delimiter)(Invalid control character at)

ValueError: Invalid control character at: line 1 column 122(char 123)

出現錯誤的原因是字符串中包含了回車符(r)或者換行符(n)

解決方案:

轉義

json_data = json_data.replace(’r’, ’r’).replace(’n’, ’n’)

使用關鍵字strict

json.loads(json_data, strict=False)

ValueError: Expecting , delimiter: line 13 column 650 (char 4186)

原因:json數據不合法,類似“group_buy_create_description_text”: “1. Select the blue “Buy” button to let other shoppers buy with you.這樣的內容出現在json數據中。

解決方案:

將類似的情形通過正則篩選出來通過下面的方式處理。

正則表達式如下:

json_data = json_data.replace(’''’, ’'########'’)

js_str = ’'[sS]+?':s?'([sS]+?)'}?}?]?,’

后續使用中發現無法匹配value為空的情況,故先做一下預處理

這個正則可以匹配到大部分的key,value中的value值,但是也有例外,暫時的處理方法是如果匹配結果中包含”{“, “}”, “[“, “]”這樣的字符,說明是匹配失敗結果,跳過處理。其他的使用下邊的方法替換掉可能出問題的字符。

如果大家有更好的正則匹配方式,歡迎隨時批評指正。

def htmlEscape(input) { if not input return input; input = input.replace('&', '&amp;'); input = input.replace('<', '&lt;'); input = input.replace('>', '&gt;'); input = input.replace(' ', '&nbsp;'); input = input.replace('’', '&#39;'); //IE暫不支持單引號的實體名稱,而支持單引號的實體編號,故單引號轉義成實體編號,其它字符轉義成實體名稱 input = input.replace(''', '&quot;'); //雙引號也需要轉義,所以加一個斜線對其進行轉義 input = input.replace('n', '<br/>'); //不能把n的過濾放在前面,因為還要對<和>過濾,這樣就會導致<br/>失效了 return input; }

以上這篇使用Python文件讀寫,自定義分隔符(custom delimiter)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
高清久久一区| 免费在线看一区| 亚洲成人一区| 另类欧美日韩国产在线| 日韩不卡视频在线观看| 亚洲人成亚洲精品| 97国产成人高清在线观看| 欧美日韩国产亚洲一区| 欧美女激情福利| 亚洲日韩中文字幕一区| 国产精品**亚洲精品| 成人亚洲一区| 午夜亚洲福利在线老司机| 中文字幕av亚洲精品一部二部| 蜜桃视频免费观看一区| 欧美影院精品| 午夜精品影院| 喷白浆一区二区| 欧美偷窥清纯综合图区| 在线亚洲成人| 日本久久精品| 免费成人网www| 亚洲精品在线二区| 日韩在线短视频| 中文亚洲免费| 国产精品调教| 青青草91视频| 中文字幕在线看片| 91久久中文| 麻豆国产精品| 亚洲欧美网站| 福利一区和二区| 视频一区欧美日韩| 精品中国亚洲| 国产精品tv| 色在线中文字幕| 久久精品国产网站| 国产精品91一区二区三区| 日韩黄色在线观看| 中文字幕成人| 国精品产品一区| 亚洲一区二区动漫| 精品一区二区男人吃奶| 欧美福利一区| 国产精品欧美日韩一区| 国产精品91一区二区三区| 国产精品一二| 国产亚洲亚洲| 国产suv精品一区二区四区视频 | 欧美日韩一区自拍| 国产精品99免费看| 91精品一区二区三区综合在线爱| 福利精品在线| 午夜精品影院| 成人欧美一区二区三区的电影| 色综合视频一区二区三区日韩| 热三久草你在线| 91成人在线网站| 在线精品小视频| 日韩av在线中文字幕| 日本午夜精品视频在线观看| 91精品成人| 国产资源在线观看入口av| 91亚洲精品在看在线观看高清| 亚洲免费成人| 日本少妇一区| 美日韩一区二区三区| 免费精品视频最新在线| 欧美香蕉视频| 久久99国产精品视频| 日韩毛片一区| 久久不射网站| 性欧美69xoxoxoxo| 91精品xxx在线观看| 另类小说一区二区三区| 国产欧美一区二区精品久久久| 免费成人av在线播放| 伊人久久大香线蕉av不卡| 久久毛片亚洲| 久久精品福利| 国产欧美日韩精品一区二区三区| 亚洲影视一区二区三区| 亚洲激情不卡| 日韩精品看片| 久草免费在线视频| 水蜜桃精品av一区二区| 国产精品久久久久久久免费软件| 日本综合精品一区| 亚洲一区网站| 国产精品嫩草99av在线| 欧美不卡视频| 美女毛片一区二区三区四区| 久久影视一区| 四虎4545www国产精品| 97se综合| 电影亚洲精品噜噜在线观看| 成人福利av| 国产精品毛片一区二区在线看| 国产精选久久| 麻豆一区二区在线| 麻豆视频久久| 精品国产一区二区三区噜噜噜| 国产精品久久国产愉拍| 国产精品调教| 精品高清久久| 日本一二区不卡| 特黄毛片在线观看| 日韩欧美一区二区三区在线视频| 狠狠躁少妇一区二区三区| 国产一二在线播放| 麻豆精品蜜桃| 亚洲国产专区| 狠狠干成人综合网| 国产亚洲精品v| 一区二区精品| 亚洲91网站| 国产精品亚洲欧美一级在线| 久久不见久久见免费视频7| 精品国产乱码久久久久久樱花| 久久精品一本| 欧美精品资源| 国产精品日韩久久久| 免费日韩一区二区| 日韩在线麻豆| 国产欧美丝祙| 精品久久中文| 欧美日韩亚洲在线观看| av亚洲免费| 久久一二三区| 日日夜夜免费精品视频| 国产精品三p一区二区| 免费福利视频一区二区三区| 久久精品在线| 久久一二三区| 欧美激情综合| 久久久亚洲一区| 免费日韩视频| 日韩精品视频一区二区三区| 国产欧美激情| 人在线成免费视频| 玖玖精品视频| 麻豆一区在线| 国产综合欧美| 一区二区三区午夜视频| 久久精品99国产精品日本| 精品在线网站观看| 国产一区视频在线观看免费| 日韩精品一二三| 国产激情精品一区二区三区| 欧美日韩尤物久久| 亚洲制服一区| 精品久久免费| 亚洲一区二区三区高清| 国产伦精品一区二区三区千人斩| 韩国久久久久久| 日韩午夜视频在线| 国产黄大片在线观看| 亚洲免费影视| 国产九一精品| 亚洲精品一区三区三区在线观看| 免费在线视频一区| 韩国女主播一区二区三区| 亚洲欧美日本国产专区一区| 国产亚洲人成a在线v网站| 久久国产欧美| 欧美日韩午夜电影网| 韩国精品主播一区二区在线观看| 中文不卡在线| 国产精品大片免费观看| 99riav1国产精品视频| 麻豆91精品视频| 中文视频一区| 久久久成人网| 日韩av一二三| 亚洲福利免费| 免费在线日韩av| 午夜在线一区二区| 91综合视频| 清纯唯美亚洲综合一区| 香蕉国产精品| 国内一区二区三区| 亚洲毛片在线免费| 久久久久久久久久久妇女| 国产日韩一区二区三区在线播放| 午夜免费一区| а√天堂中文在线资源8| 91精品视频一区二区| 婷婷丁香综合| 精品少妇一区| 日本亚洲视频| 亚洲精品一二三区区别| 成人精品国产亚洲| 91亚洲无吗| 日韩在线一区二区| 日本精品在线中文字幕| 久久精品一区二区国产| 日本综合视频| 日韩精品一二区| 九九在线精品| 日韩在线短视频|