0

置き換えたい名前を含むテキストの文字列を含むファイルがあります。名前を含む A と B の 2 つの列を持つ別のファイルがあります。列 A には、文字列 (ファイル 1) と同じ名前が含まれています。基本的に、これらの名前を列 B の名前に置き換えたいと思います。Python を使用してみましたが、まだ初心者すぎて使いこなせません。どんなポインタでも大歓迎です。

ファイル1               
名前A.....名前B....名前C....など

ファイル2                 
AB    
名前A 名前D         
名前B 名前E          
名前C 名前F

したい;

ファイル1                       
NameD....NameE....NameF....etc

4

5 に答える 5

1
#read filrst file as list
with open("file1") as f:
    names1=f.read().strip().split();

#read file2 as dictionary
with open("file2") as f:  
    names2=dict(i.strip().split() for i in  f.readlines())

#write replacement in file3
with open("file3","w") as f:
    f.write(" ".join(names2[i] for i in names1))
于 2013-03-22T17:10:12.890 に答える
0

返信ありがとうございます。ただし、どれも実際には正しく機能しませんでした。おそらく、file1 (newick 形式) の文字列の性質によるものです。これは私が最初に取り組んだものです...おそらくあまり良くありません。ただし、置換機能を機能させることができれば、うまくいくかもしれません..?

import re

LineString = open("file1.txt", "r").read()

pattern = re.compile('\d+OTU\_\d+\_\w+\_\d+')
words = pattern.findall(LineString)

colA = []
colB = []

with open("file2.txt", "r") as f:
for line in f:
    parts = line.split()
    if len(parts) > 0:
        colA.append(parts[0])   
    if len(parts) > 1:
        colB.append(parts[1])

#Doesnt work
if words == colA:
LineString.replace(colA, colB)

file1 の文字列は次のようになります:(((((((('1OTU_1_769_wint_446':0.00156420,'1OTU_1_822_wint_445':0.00000000)0.5700:0.00156410,'1OTU_1_851_wint_454':0.00000000))

単語、colA、colB は次のようになります: 例: 1OTU_1_769_wint_446

于 2013-03-23T13:43:49.037 に答える
0

RegEx (Python の re モジュール) の使用を検討します。これにより、特定のテキスト パターンを検索できる関数を作成できます。re.compile() 関数と re.search() 関数を適切に構築すれば、 group() 関数を使用して選択したテキストの「グループ」を抽出できます。ライブラリは非常に広範であるため、ドキュメントへのリンクを次に示します。

http://docs.python.org/2/library/re.html

また、次のようなオンライン チュートリアルも参照してください。

http://www.youtube.com/watch?v=DRR9fOXkfRE

于 2013-03-22T17:02:11.520 に答える