2016-11-21 40 views
1

剛剛掌握一切的Python新手。我正在尋找替換我的數據中重複出現的字符串的一部分。我懷疑正則表達式會成爲答案,但是對於python來說,這是一個新的問題,我正在努力爭取一些正確的答案。Python取代了變化的字符串的一部分

我的文本示例是這個「PROD v2.0 - 測試窗口 - 應用程序」。隨着開發人員引入新窗口,PROD v2.0將更改爲v3.0等等。我想要做的是刪除整個第一部分,並離開只是「測試窗口 - 應用程序」

我已經加載了我正在使用的腳本中正在發生的其他事情,所以我會理想地尋找協助在哪裏放置這個。

以下是我到目前爲止的腳本。我已經刪除了某些方面,因爲這是針對某個工作項目和我無法分享的某些部分。任何幫助都將得到大規模的讚賞,我知道我的腳本可能寫得不好,我正在開發的這個項目很快就會到期,我只是想在這個階段獲得這個功能。

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」的出現,但你不想與之相關(或者不符合之前的模式)

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