2016-11-21 6 views
1

すべてを把握するためにpythonに新しくなりました。私は私のデータで繰り返している文字列の一部を置き換えるために探しています。私は正規表現が答えになるだろうと思うが、私はこの権利を得るために少し苦労しているpythonには新しいです。Pythonは変化する文字列の一部を置き換えます

私のテキストの例は、この「PROD v2.0 - テストウィンドウ - アプリケーション」です。開発者が新しいウィンドウを導入すると、PROD v2.0がv3.0などに変更されます。私がしたいことは、最初の部分全体を削除して、 "Test Window - App"のままにしておきます。

私は理想的には探しているスクリプトで他のことが起こっていますこれを置く場所の助け。

以下は、これまでのスクリプトです。私はこれが仕事のプロジェクトと私が共有できない特定の部分のためのものであるので、これの特定の側面を削除しました。どんな助けも大いに感謝されます、私は私のスクリプトが同様に書かれていないかもしれないことを認識しています、私が取り組んでいるプロジェクトはすぐに予定されています、そして、私はこの段階でこの機能を得ようとしています。

import pandas as pd 
data_xls = pd.read_excel('REMOVED.xls', 'Sheet1', index_col=None) 
data_xls.to_csv('//REMOVED.csv', encoding='utf-8') 

import codecs 
import pandas as pd 
import os 
#import dataset 
from datetime import datetime as dt 

targetDir = 'REMOVED' 
outputFile = 'UPLOADSTEP1.txt' 

substitutions = COLUMN SUBS REMOVED    

selectCols = [COLUMN ORDER REMOVED] 
first = True 

# Set working directory 
os.chdir(targetDir) 

# Iterate thorugh all files in directory 
for i in os.listdir(os.getcwd()): 
if i.endswith('.csv') and i.startswith('Temp'): 
    print (i); 
    # Files are UTF-8 encoded with BOM which Pandas cannot handle. Open with   coedcs first before passing to Pandas 
    opened = codecs.open(i, 'rU', 'UTF-8') 
    # Read file into dataframe 
    df = pd.read_csv(opened, header=0) 

    # Replace headers 
    for row in substitutions: 
     if row[0] in df.columns: 
      df.rename(columns={row[0]:row[1]}, inplace=True) 
      print(row[0], '->', row[1]) 

    # Save to csv 
    if first: 
     # print("First section") 
     # First file save, retain headers and overwrite previous 
     # destFile = open(outputFile, 'w') 
     df.to_csv(outputFile, columns=selectCols, header=True, index=False, low_memory=False, sep='\t') 
     first = False 
    else: 
     # print("Subsequent section") 
     # Not first file save, remove headers and append to previous 
     destFile = open(outputFile, 'a') 
     df.to_csv(destFile, columns=selectCols, header=False, index=False, low_memory=False, sep='\t') 
    continue 

# Symbol Cleanse 
f1 = open('UPLOADSTEP1.txt', 'r') 
f2 = open('UPLOADSTEP2.txt', 'w') 
for line in f1: 
f2.write(line.replace(' – ', ' ')) 
f1.close() 
f2.close() 
+0

あなたのコードには、置換が行われる手掛かりがありません。しかし、一般的には、おそらく 're'モジュールを使用します。最初の ' - 'までのものを何も置き換えたくないと言うのは公正でしょうか? – eddiem

+0

はい申し訳ありませんが、私はどこに配置するかについて少し失われているので、現在私のコードには何もありません。私は全体のPRODとバージョン番号とハイフンを取り除きたいと思います。削除したいテキストは、データセットの特定の列に表示されます。私が言ったように、バージョン番号は常に変化するので、それに対処する必要があります:) – nohholmez

答えて

0

このコードは最適ではありませんが、このトリックを行う必要があります。

あなたが置き換えようとしているすべての文字列が "PROD vXXXX - "で始まり、 "PROD v"が存在しないと仮定しています。relaceしたくない(または以前のパターンと一致しません) )

text = '' 
with open(inputfilename,'r') as f: 
    text = f.read() 

while 'PROD v' in text: 
    tail = text[text.find('PROD v'):]  # get the text after "PROD v" 
    tail = tail[tail.find('-')+1:]  # get rid of everything before the nearest "-" 
    text = text[:text.find('PROD v')] + tail 

with open(outputfilename,'w') as f: 
    f.write(text) 
+0

うまくいってくれてありがとう!私は、ファイルサイズで私はそれを扱っているので、実行するためにしばらく時間がかかりますが、仕事がありがとう! – nohholmez

関連する問題