Как заменить только определенные строки в текстовом файле, используя CSV-файл - PullRequest
2 голосов
/ 19 июня 2019

У меня есть CSV-файл (script.csv), который используется в качестве сценария для замены строк в нескольких файлах.Thease файлы являются графическими файлами.Количество графиков для каждого файла указано в CSV-файле.Для первого файла количество графиков равно 1.Для второго файла - 3 графика, Для третьего файла - 2 графика, Для четвертого файла - 4 графика, Для 5-го графика файла - 1, аналогично.

Данные в csv (скрипт.csv)

     Number of Graphs   1       3       2       4       1
         ---            --      --      --      --      --
     y_title           y1       y1      y1      y1      y1
                                y2      y2      y2
                                y3              y3
                                                y4

Предположим, x4.txt - это файл из четырех графиков.Затем я ищу места для замены строки с помощью регулярного выражения.Тогда я нашел пять мест для замены, но мне нужно заменить только 4 места.Например: если re.search (r '/ et y', строка): print (строка)

 df=pd.read_csv("script.csv")

 class Update:

    ytCount=0

    def file_read(self):

    f1 = open(inpFile, 'r')
    f2 = open(outFile, 'w')
    for line in f1.readlines():
        string=line            
        if re.search(r'/et    y', string):
            self.y_axis_title(string,f2)            
        else:
            f2.write(string)

   def y_axis_title(self,string,f2):
    if nGraphs==1:
        self.ytCount=0
        if self.ytCount == 0:
            word = self.y_change_title(string, ''.join(y_title))
            f2.write(word)
    else:
        for i in range(self.ytCount,nGraphs):
            if self.ytCount==i:
                word=self.y_change_title(string,y_title[i])
                f2.write(word)
        if self.ytCount==nGraphs-1:
                self.ytCount=0
        else:
                self.ytCount+=1
    def y_change_title(self,string,ytitle):
    strplt=string.split()

    word = strplt[0] + "    " + strplt[1] + " " + strplt[2][0] + ytitle + "    "+strplt[2][0]  + "\t" + '   '.join(strplt[4:6]) + "\n"
    return word

 obj=Update()
 colCount=((df.count(axis=1)[0])-1)
 for i in  range(colCount):

nGraphs=int(df.columns[2:][i][0])
inpFile=df[df.columns[2:][i]][0]
outFile=df[df.columns[2:][i]][0]+"_out"    

if nGraphs == 1:       
    y_title = list(df[df.columns[2:][i]][5])    //      y_tiltle in 5th row
elif nGraphs==2:        
    y_title=list(df[df.columns[2:][i]][6:8])  //        y_tiltle in 6 to 7 row

elif nGraphs==3:        
    y_title = list(df[df.columns[2:][i]][7:10])   //        y_tiltle in 7 to 9 row

elif nGraphs == 4:        
    y_title = list(df[df.columns[2:][i]][8:12])     // y_tiltle in 8 to 11 row
obj.file_read()

Входной файл, содержащий заменяемые строки:

 /et    y "HHJKLJ" ;axis title

/et    y "SDFSDF"  ;axis title

 /et    y "STSTS" ;axis title

 /et    y "uiuhig"   ;axis title

 /et    y "fgfjhgjhg" ;axis title

Я хочумой вывод как

 /et    y "y1" ;axis title

 /et    y "y2"  ;axis title

 /et    y "y3" ;axis title

 /et    y "y4"   ;axis title

 /et    y "fgfjhgjhg" ;axis title

Но что я на самом деле получаю:

/et    y "y1" ;axis title

/et    y "y2"  ;axis title

/et    y "y3" ;axis title

/et    y "y4"   ;axis title

/et    y "y1" ;axis title


I dont to replace the fifth string in y1 I want only to replace upto fourth, for the fifth string just write what is in the input file. 

Как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...