簡體   English   中英

如何在python中搜索和替換文本文件的多個值?

[英]how to search and replace for multiple value of text file in python?

我的資料:

1 255 59 0 1 255 0 1 1 0 4 0 5 

0 1 255 1 253 0 90 1 1 0 2 0 233

我是python的新手,我需要通過使用條件替換文本文件中的所有值:

  1. 如果行中的值= 255,則替換為1

  2. 如果行中的值<255(254、253、252 ...),則替換為0

因此,我的目標數據是:

1 1 0 0 1 1 0 1 1 0 0 0 0 

0 1 1 1 0 0 0 1 1 0 0 0 0

我怎么解決這個問題?

實際上,我試圖修復它,但不適用於我的數據。

這是我的代碼:

f1 = open('20130103.txt','r')
f2 = open('20130103_2.txt','w')
count = 255
for line in f1:
    line = line.replace('255','1')
    count = count-1
    line = line.replace('%d'%(count), '0')
    f2.write(line)
f1.close()
f2.close()

結果是:

1 1 59 0 1 1 0 1 1 0 4 0 5 
0 1 1 1 0 0 90 1 1 0 2 0 233

此處的引人注目的是數字255 ,您要為其顯示1 ,該數字清楚地表明您只對第8th bi感興趣。 唯一看起來很奇怪的情況是您的o / p如何不符合您的要求,在這種情況下無法操縱1 ,因此必須將其排除在轉換之外

如果我必須相信您的要求

>>> with open("test.in") as fin, open("test.out","w") as fout:
    for line in fin:
        line = (e >> 7 for e in map(int, line.split()))
        fout.write(''.join(map(str, line)))
        fout.write('\n')

如果我必須信任您的數據

>>> with open("test.in") as fin, open("test.out","w") as fout:
    for line in fin:
        line = (e >> 7 if e != 1  else 1 for e in map(int, line.split()))
        fout.write(''.join(map(str, line)))
        fout.write('\n')

此問題的另一種觀點。

>>> with open("test.in") as fin, open("test.out","w") as fout:
    for line in fin:
        line = (e / 255 if e != 1  else 1 for e in map(int, line.split()))
        fout.write(''.join(map(str, line)))
        fout.write('\n')

您可以執行以下操作:

with open('20130103.txt', 'r') as f1, open('20130103_2.txt', 'w') as f2:
    for line in f1:
        values = line.split()
        new_values = ' '.join('1' if value == '255' else '0' for value in values)

        f2.write(new_values + '\n')
  • line.split()將行拆分為多個塊。 'a b'.split() == ['a', 'b']
  • '1' if value == '255' else '0' for value in values是一個生成器,僅根據值列表中某項的值輸出'1''0'
  • ' '.join() )用空格將列表(或生成器' '.join()的值連接在一起。

這是一個示例,說明如何傳遞re.sub函數-而不是replace字符串-可以很好地控制替換的完成方式:

import re
lines = ['1 255 59 0 1 255 0 1 1 0 4 0 5',
     '0 1 255 1 253 0 90 1 1 0 2 0 233']
def do_replace(match):
    number = int(match.group(0))
    if number == 0 or number == 1:
        return str(number)
    elif number == 255:
        return '1'
    elif number < 255:
        return '0'
    else:
        raise ValueError
for line in lines:
    print re.sub(r'\d+', do_replace, line)

打印:

1 1 0 0 1 1 0 1 1 0 0 0 0
0 1 1 1 0 0 0 1 1 0 0 0 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM