如何从每行文本中读入特定字符并将其写入另一个文件?

2024-05-23 14:51:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个txt文件名为“tclust.txt文件另一个名字叫“ef”_蓝色.txt." 我正在尝试编写一个python脚本,它允许我从ef导入某些字符_蓝色.txt至tclust.txt文件. 到目前为止,我只能读入ef的值_蓝色.txt从txt文件到tclust.txt文件. 我的ef_蓝色.txt有多行文本,但我只想从每行中提取某些字符(例如:第2行中的“7.827382”和第2行中的“6.432342”)。你知道吗

blue = open("ef_blue.xpk", "rt")
contents = blue.read()

with open("tclust.txt","a") as f2: 
    f2.writelines(contents)

blue.close()
f2.close()

编辑:我的tclust.txt文件文件如下所示:

“键入rbclust

峰值0 8.5 0.05 4.0 0.05

Atom 0 125.H8 126.H1“标签数据集sw sf”

我的ef_蓝色.xpk文件如下所示:

“标签数据集sw sf”

1小时2

NOESYèu F1eF2f.nv公司

4807.69238281 4803.07373047

600.402832031 600.402832031

1H.L 1H.p 1H.W 1H.B 1H.E 1H.J 1H.U 1H_2.L 1H_2.W 1H_2.B 1H_2.E 1H_2.J 1H_2.U vol int stat comment flag0 flag8 flag9

0{}7.45766 0.01702 0.03286++{0.0}{}5.68094 0.07678 0.15049++{0.0}{}0.0 4.8459 0{}0 0

1{}8.11276 0.02278 0.03212++{0.0}{}5.52142 0.07827 0.11252++{0.0}{0.0 2.0824 0{}0 0

2{}7.85285 0.02369 0.02232++{0.0}{}5.52444 0.07280 0.06773++{0.0}{}0.0 0 0.8844 0{}0 0

3{}7.45819 0.01630 0.02914++{0.0}{}5.42587 0.07081 0.11733++{0.0}{0.0 2.8708 0{}0

4{}7.89775 0.01106 0.00074++{0.0}{}5.23989 0.07077 0.00226++{0.0}{}0.0 0 0.4846 0{}0

5{}7.85335 0.02665 0.03635++{0.0}{}5.23688 0.09117 0.12591++{0.0}{}0.0 1.5210 0{}0”

所以我要做的是从我的ef中提取角色_蓝色.xpk比如第7行的“7.45766”和“5.68094”,写在我的第3行tclust.txt文件文件

所以我想要我的tclust.txt文件文件的外观:

type rbclust
Peak 0 8.5 0.05 4.0 0.05
       7.45766   5.68094
       8.11276   5.52142
 .... etc
Atom 0 125.H8 126.H1'label dataset sw sf

Edit2:@开源

This is the output I get


Tags: 文件txtclosecontentsblueopensfsw
2条回答
blue = open("ef_blue.txt", "rt")
contents = blue.readlines()

with open("tclust.txt","a") as f2: 
    for cont in range(len(contents)):
        if cont > 5:
            a = contents[cont].split(' ')
            print(a[2]+ '  ' + a[9])
            f2.writelines(a[2] + '  '+ a[9] + '  ')


blue.close()
f2.close()

尝试一下,用readlines来转换列表中的每一行,然后用for来调用列表并检查是否在适当的行中,最后用空格来分隔列表中的实际行,告诉我在那个工作中

您可以尝试以下操作:

import re

# read tclust.txt file line by line 
# remove last line and empty second last line
# save last line in variable

lines = open('tclust.txt').readlines()
last_line = lines[-1]

# update tclust.txt without last two lines 
open('tclust.txt', 'w').writelines(lines[:-2])

# Open both files
with open("ef_blue.xpk", "rt") as f1, open("tclust.txt","a") as f2:
    # Read ef_blue.xpk line by line 
    for line in f1.readlines():
        # check for 1.23232 format numbers
        float_num = re.findall("[\s][1-9]{1}\.[0-9]+", line)
        # if any digit found in line that matches format
        # assumming there must be 2 in line if found
        if len(float_num)>1:
            # write with 6 empty spaces in the beginning and separated by tab
            f2.writelines(' '*6 + float_num[0] + '\t' + float_num[1] + '\n')

    # finally write the last line earlier removed
    f2.writelines(last_line)

tclust.txt的输出:

"type rbclust

Peak 0 8.5 0.05 4.0 0.05
       7.45766   5.68094
       8.11276   5.52142
       7.85285   5.52444
       7.45819   5.42587
       7.89775   5.23989
       7.85335   5.23688
Atom 0 125.H8 126.H1' label dataset sw sf"

输入:ef_blue.xpk

"label dataset sw sf

1H 1H_2

NOESY_F1eF2f.nv

4807.69238281 4803.07373047

600.402832031 600.402832031

1H.L 1H.P 1H.W 1H.B 1H.E 1H.J 1H.U 1H_2.L 1H_2.P 1H_2.W 1H_2.B 1H_2.E 1H_2.J 1H_2.U vol int stat comment flag0 flag8 flag9

0 {} 7.45766 0.01702 0.03286 ++ {0.0} {} {} 5.68094 0.07678 0.15049 ++ {0.0} {} 0.0 4.8459 0 {} 0 0 0

1 {} 8.11276 0.02278 0.03212 ++ {0.0} {} {} 5.52142 0.07827 0.11252 ++ {0.0} {} 0.0 2.0824 0 {} 0 0 0

2 {} 7.85285 0.02369 0.02232 ++ {0.0} {} {} 5.52444 0.07280 0.06773 ++ {0.0} {} 0.0 0.8844 0 {} 0 0 0

3 {} 7.45819 0.01630 0.02914 ++ {0.0} {} {} 5.42587 0.07081 0.11733 ++ {0.0} {} 0.0 2.8708 0 {} 0 0 0

4 {} 7.89775 0.01106 0.00074 ++ {0.0} {} {} 5.23989 0.07077 0.00226 ++ {0.0} {} 0.0 0.4846 0 {} 0 0 0

5 {} 7.85335 0.02665 0.03635 ++ {0.0} {} {} 5.23688 0.09117 0.12591 ++ {0.0} {} 0.0 1.5210 0 {} 0 0 0"

输入:tclust.txt

"type rbclust

Peak 0 8.5 0.05 4.0 0.05

Atom 0 125.H8 126.H1' label dataset sw sf"

相关问题 更多 >