dictionary to csv

#!/usr/bin/env python import os,re,sys,string,commands,getopt,subprocess,glob,csv import prettytable as pt from os import path #SL335752_kneaddata_paired_1_kneaddata_paired_1.fastq.gz_rep.mpa.txt_bracken.txt #SL311013_1_kneaddata_paired_1_kneaddata_paired_1.fastq.gz_rep_mpa.txt_bracken.txt def main(): dic = {} unique_speciesname = [] speciesname = [] samplenames = [] for d in os.listdir(‘.’): print(d) a = [] a = re.split(“_kneaddata_paired_1_”,d) if len(a) >=2: samplename = a[0] dic[a[0]] = {} #os.rename(d, newname) fh = open(d, ‘r’) fhlines […]

batch script in python

#!/usr/bin/env python import os,re,sys,string,commands,getopt,subprocess,glob from os import path #/disk/rdisk08/mhyleung/loreal_shotgun2/NovaSeq_new/decontam_output_genome/paired_completed/szy_test #LOR294C_S130_R1_001_kneaddata_paired_1_decontaminated.fastq.paired.fq.gz

#LOR294C_S130_R1_001_kneaddata_paired_1.fastq.gz #metawrap binning -o /home/mhyleung/workspace/loreal_shotgun2/NovaSeq_new/metawrap_assembly_R2/LOR303C -t 16 -a /home/mhyleung/workspace/loreal_shotgun2/NovaSeq_new/metawrap_assembly_R2/LOR303C_S134_R1_001_kneaddata_paired/LOR303C_final_assembly.fasta –maxbin2 –metabat2 –concoct /disk/rdisk08/mhyleung/loreal_shotgun2/NovaSeq_new/decontam_output_genome/paired_completed/szy_test/LOR303C_S134_R1_001_kneaddata_paired_*.fastq #host = subprocess.Popen([‘host’, target], stdout = subprocess.PIPE).communicate()[0] #p1 = subprocess.Popen([‘ping’, ‘-c 2′, host], stdout=subprocess.PIPE)

 

 

def main(): for d in os.listdir(‘/disk/rdisk08/mhyleung/loreal_shotgun2/NovaSeq_new/decontam_output_genome/paired_completed/szy_test’): #print(d) if re.search(“_1.fastq”, d): a = [] a = re.split(“_”,d) […]

linux shell 用sed命令在文本的行尾或行首添加字符

昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~

 

用sed命令在行首或行尾添加字符的命令有以下几种:

假设处理的文本为test.file

在每行的头添加字符,比如”HEAD”,命令如下:

sed ‘s/^/HEAD&/g’ test.file

在每行的行尾添加字符,比如“TAIL”,命令如下:

sed ‘s/$/&TAIL/g’ test.file

运行结果如下图:

几点说明:

1.”^”代表行首,”$”代表行尾

2.’s/$/&TAIL/g’中的字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了

例:

3.如果想导出文件,在命令末尾加”> outfile_name”;如果想在原文件上更改,添加选项”-i”,如

4.也可以把两条命令和在一起,在test.file的每一行的行头和行尾分别添加字符”HEAD”、“TAIL”,命令:sed ‘/./{s/^/HEAD&/;s/$/&TAIL/}’ test.file

 

 

以上其实都还OK,昨天花太多时间,主要因为被处理的文件是用mysql从数据库提取的结果导出来的,别人给我之后我就直接处理,太脑残了= -我一直有点怀疑之所以结果不对,有可能是windows和linux换行的问题,可是因为对sed不熟,就一直在搞sed。。。。。。。

 

众所周知(= -),window和linux的回车换行之云云,如果你知道了,跳过这一段,不知道,读一下呗:

Unix系统里,每行结尾只有“<换行>”,即“\n”;Windows系统里面,每行结尾是“<换行><回 车>”,即“\n\r”。一个直接后果是,Unix系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix下打开的话,在每行的结尾可能会多出一个^M符号。

 

好了,所以我的问题就出在被处理的文件的每行末尾都有^M符号,而这通常是看不出来的。可以用”cat -A test.file”命令查看。因此当我想在行尾添加字符的时候,它总是添加在行首且会覆盖掉原来行首的字符。

要把文件转换一下,有两种方法:

1.命令dos2unix test.file

2.去掉”\r” ,用命令sed -i ‘s/\r//’ test.file

好了,这样处理完,就OK啦!!!

[…]

Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等

Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等) s.strip() .lstrip() .rstrip(‘,’) 去空格及特殊符号 复制字符串

Python

1 #strcpy(sStr1,sStr2) 2 sStr1 = ‘strcpy’ 3 sStr2 = sStr1 4 sStr1 = ‘strcpy2′ 5 print sStr2 连接字符串

Python

1 #strcat(sStr1,sStr2) 2 sStr1 = ‘strcat’ 3 sStr2 = ‘append’ 4 sStr1 += sStr2 5 print sStr1 查找字符

< 0 未找到

Python

1 #strchr(sStr1,sStr2) 2 sStr1 = ‘strchr’ […]

Python 自建标准差函数

def stdDeviation(a): l=len(a) m=sum(a)/l d=0 for i in a:

d+=(i-m)**2 return (d*(1/l))**0.5

a=[5,6,8,9] print(stdDeviation(a)) ======== 1.5811388300841898

Good Useful one-line scripts for sed!

————————————————————————- SED单行脚本快速参考(Unix 流编辑器) 2005年12月29日 英文标题:USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor) 原标题:HANDY ONE-LINERS FOR SED (Unix stream editor) 整理:Eric Pement – 电邮:pemente[at]northpark[dot]edu 版本5.5 译者:Joe Hong – 电邮:hq00e[at]126[dot]com 在以下地址可找到本文档的最新(英文)版本: http://sed.sourceforge.net/sed1line.txt http://www.pement.org/sed/sed1line.txt 其他语言版本: 中文 – http://sed.sourceforge.net/sed1line_zh-CN.html 捷克语 – http://sed.sourceforge.net/sed1line_cz.html 荷语 – http://sed.sourceforge.net/sed1line_nl.html 法语 – http://sed.sourceforge.net/sed1line_fr.html 德语 – http://sed.sourceforge.net/sed1line_de.html 葡语 – http://sed.sourceforge.net/sed1line_pt-BR.html 文本间隔: ——– # 在每一行后面增加一空行 sed […]

[python] 关于python中的string.atoi()的问题

#!/usr/bin/python #filename:string.py

import string

print string.atoi(’13’,8) #这里转换8进制的数 print string.atoi(’13’,16) #这里转换成16进制的数

运行后的结果: 11 19

>>> import string >>> string.atoi(’13’,8) 11 >>> string.atoi(’13’,10) 13 >>> string.atoi(’13’) 13 >>>

python 正则表达 前向界定与后向界定

>>> a ‘[acyl-carrier-protein] S-malonyltransferase [EC:2.3.1.39]’ >>> b = re.findall(r'(?<=\[EC:).+?(?=\])’,a) >>> b [‘2.3.1.39′] >>> b = re.findall(r'(?<=\[).+?(?=\])’,a) >>> b [‘acyl-carrier-protein’, ‘EC:2.3.1.39′]

前向界定与后向界定

有时候需要匹配一个跟在特定内容后面的或者在特定内容前面的字符串,Python提供一个简便的前向界定和后向界定功能,或者叫前导指定和跟从指定功能。它们是:

‘(?<=…)’ 前向界定

括号中’…’代表你希望匹配的字符串的前面应该出现的字符串。

‘(?=…)’ 后向界定

括号中的’…’代表你希望匹配的字符串后面应该出现的字符串。

例: 你希望找出c语言的注释中的内容,它们是包含在’/*’和’*/’之间,不过你并不希望匹配的结果把’/*’和’*/’也包括进来,那么你可以这样用:

>>> s=r’/* comment 1 */ code /* comment 2 */’

>>> re.findall( r’(?<=//*).+?(?=/*/)’ , s )

[‘ comment 1 ‘, ‘ comment 2 ‘]

[…]

python dic problem

dic_cog_annot[h2[1]]={‘orthologous_group':h[3]} dic_cog_annot[h2[1]][‘protein_annot’]=h[4] 以上是增加个protein_annot键值,

如果是以下,将会被替换,只一个键值!

dic_cog_annot[h2[1]]={‘orthologous_group':h[3]} dic_cog_annot[h2[1]]={‘protein_annot':h[4]}

 

dic[name]=”NA”

dic[name] = {‘nr_annot':”NA”} dic[name][‘go_num’]=”NA” dic[name][‘go_info’] = “NA” dic[name][‘kegg_hit’] = “NA” dic[name][‘kegg_annot’]=”NA” dic[name][‘swiss_annot’]=”NA” dic[name][‘cog_hit’] =”NA” dic[name][‘orthologous_group’]=”NA” dic[name][‘protein_annot’]=”NA”

 

python 键值排序输出

method1:

dic = {}

keys= dic.keys()

keys.sort()

for key in keys:

print dic[key]

 

method2:

for key in sorted(write_list_hash.keys()): print write_list_hash[key]