[英]iterating over characters in a line and replacing them
我一直在研究一个程序,该程序用等效的十进制ascii替换一行中的字符(在示例中为[h])。 这是我到目前为止所拥有的...
f2 = path to file
if re.match('[AGNTC]{5}', line):
next_line = next(f2)
unilist.append(next(f2))
for j in unilist:
j=[x for x in unilist if x]
g=[word.strip() for word in j]
g= ''.join(g)
for ch in g:
char= ord(ch)
char= int(char)
ch= str(char-33)
至此一切正常。 我不久前才开始学习python,所以我只需要指针。 我想根据相应字符的位置将所有ch放在一个字符串中。 f2文件看起来像:
@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
TTGCCTGCCTATCATTTTAGTGCCTGTGAGGTGGAGATGTGAGGATCAGT
+SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
hhhhhhhhhhghhghhhhhfhhhhhfffffeee[X]b[d[ed`[Y[^Y
我正在考虑也许使用itertools进行配对。 我还需要用T,G,C和A修改行,以便如果ascii代码小于20,则将相应的字符替换为N。正如我之前提到的,我只需要知道什么工具会是最适合这份工作的,所有建议和技巧都值得赞赏。
我努力了:
for cha in g:
g.replace(str(cha), ch)
print(g)
但是,它会打印回第一行。
编辑:我已经解决了序列问题,但是我需要知道如何配对值...
for cha in g:
char= ord(cha)
char= int(char)
ch= str(char-33)
mylist.append(ch)
mylist=','.join(mylist)
f1.write('%s\n' %mylist)
编辑:我试图写一点:
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = tee(iterable)
next(b, None)
return zip(a, b)
burp = random.randrange(0, 100000000000)
f1 = open(path to file)
f3=open(path to file3, 'w+')
for line, next_line in pairwise(f1):
if re.match ('[AGTCN]{5}', line):
for ch in next_line:
if ch<str('20'):
for ch in line:
line.replace(ch,'N')
f3.write('%s' %line)
else:
if re.match(r'\d{1,1}', line):
line=''
f3.write('%s' %line)
else:
f3.write('%s' %line)
但是,我想知道如何考虑这两行中分数和ch位置之间的“,”。 现在输出有第二行,没有修改或任何东西...
编辑:现在,我只需要根据我最近一次编辑获得的ascii得分,找到第二行实际替换N的方法。
我相信您要执行的操作是遍历文件的第二和第四行,并根据第四行中字符的ASCII值更改第二行中的字符。
输入:
@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
TTGCCTGCCTATCATTTTAGTGCCTGTGAGGTGGAGATGTGAGGATCAGT
+SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
hhhhhhhhhhghhghhhhhfhhhhhfffffeee[X]b[d[ed`[Y[^Y
输出:
@SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN
+SRR566546.970 HWUSI-EAS1673_11067_FC7070M:4:1:2299:1109 length=50
hhhhhhhhhhghhghhhhhfhhhhhfffffeee[X]b[d[ed`[Y[^Y
Python字符串是不可变的(无法修改)。 读入整个文件,将相关行转换为列表,检查第四行中哪些字符的ASCII值大于53,然后用N
覆盖第二行中的相应字符。
# Read file, convert strings to lists
fin = open("path/to/file")
lines = fin.readlines()
line2, line4 = list(lines[1]), list(lines[3])
# Make the changes to our lists
for i, c in enumerate(line4):
if( ord(c) > 53 ):
line2[i] = 'N'
# Overwrite line 2
lines[1] = ''.join(line2)
# Save back to the file
fin.seek(0)
for line in lines:
fin.write(line)
fin.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.