Hướng dẫn python insert line before match - dòng chèn python trước trận đấu

Tôi có hai biến var1var2 trên hai số dòng khác nhau. Nhiệm vụ của tôi là:

  1. Để mở một tệp đầu vào, hãy tìm kiếm các dòng bắt đầu bằng var1 và chèn nhận xét trên dòng.
  2. Để mở cùng một tệp đầu vào, hãy tìm kiếm các dòng bắt đầu bằng var2 và chèn một nhận xét bên dưới dòng.

Tôi đã có thể đạt được 1 nhưng không phải 2.

var1 = 2 #line number
var2 = 5 #line number
comment1 = "inserted text above var1"
comment2 = "inserted text below var2"
    some for loop:   
     found1 = False
     found2 = False
                    for line in fileinput.input(source.txt, inplace=True):
                        if not found and line.startswith(var1):
                            print comment1
                            found1 = True
                        print line,
                        if not found and line.startswith(var2):
                            print line
                            found1 = True
                        print comment2,

Tệp đầu vào:

1 abc
2 def
3 ghi
4 jkl
5 mno
6 pqr
7 stu

Đầu ra phải là:

1 abc
inserted text above var1
2 def
3 ghi
4 jkl
5 mno
inserted text below var2
6 pqr
7 stu

Hướng dẫn python insert line before match - dòng chèn python trước trận đấu

BSMP

4.4278 Huy hiệu vàng35 Huy hiệu bạc44 Huy hiệu đồng8 gold badges35 silver badges44 bronze badges

Khi được hỏi ngày 24 tháng 5 năm 2017 lúc 17:04May 24, 2017 at 17:04

Bạn dường như có rất nhiều biến mà bạn không cần. Cách mà tôi đọc mã của bạn, dựa trên thụt lề, bạn sẽ luôn in bình luận2 và đôi khi bạn sẽ in dòng nhiều hơn một lần. Bạn không cần 2 cho vòng lặp. Bạn không bao giờ sử dụng Found1 hoặc Found2, và biến được tìm thấy không bao giờ được định nghĩa Đây là những biến mà bạn có thể không cần. Bạn cần phải xác định Source.txt là một biến hoặc chuyển nó dưới dạng chuỗi (đặt "xung quanh nó, đó là những gì tôi nghĩ bạn muốn làm). () Mong đợi một chuỗi sẽ được truyền vào.

Đơn giản hóa nó một chút và tôi nghĩ rằng bạn sẽ không có vấn đề. Giả sử rằng bạn đang xử lý việc đọc tệp một cách chính xác, một cái gì đó như thế này nên thực hiện thủ thuật.

var1= "2" #line number
var2 = "5" #line number
comment1 = "inserted text above var1"
comment2 = "inserted text below var2"
for line in fileinput.input("source.txt", inplace=True):
  if line.startswith(var1):
    print comment1
  print line
  if line.starswith(var2):
    print comment2

Đã trả lời ngày 24 tháng 5 năm 2017 lúc 17:28May 24, 2017 at 17:28

JeffjeffJeff

Phù hiệu bằng đồng 9655 bronze badges

2

Tôi có một tệp RHEL Kickstart như dưới đây với nhiều phần %... %phần cuối trong đó có nhiều dòng mã python ở giữa chúng.%post ... %end sections in it having many lines of Python code in between them.

%post
.....
.....
%end
%post
.....
.....
%end
%post
.....
.....
%end

Tôi đang cố gắng chèn một dòng mới với một số dữ liệu ngay trước (ở trên) lần xuất hiện thứ 2 của mẫu tìm kiếm "%kết thúc" từ cuối cùng (EOF). Bất kỳ gợi ý/đầu vào thực sự được đánh giá cao.%end" from last (EOF). Any hints/input is really appreciated.

Khi được hỏi ngày 9 tháng 5 năm 2018 lúc 12:43May 9, 2018 at 12:43

Ibrahim Quraishibrahim QuraishIbrahim Quraish

3351 Huy hiệu vàng6 Huy hiệu bạc18 Huy hiệu đồng1 gold badge6 silver badges18 bronze badges

6

Đoạn Python chèn văn bản

1 abc
2 def
3 ghi
4 jkl
5 mno
6 pqr
7 stu
2 ở vị trí cuối cùng trong khối
1 abc
2 def
3 ghi
4 jkl
5 mno
6 pqr
7 stu
3 thứ hai đến cuối:

with open('input') as fp:
    lines = fp.readlines()

locs = [i for i, val in enumerate(lines) if val == '%end\n']
lines.insert(locs[-2], 'spam' + '\n')

with open('input', 'w') as fp:
    fp.write(''.join(lines))

Đã trả lời ngày 9 tháng 5 năm 2018 lúc 15:58May 9, 2018 at 15:58

Hướng dẫn python insert line before match - dòng chèn python trước trận đấu

Hoeflinghoeflinghoefling

8661 Huy hiệu vàng7 Huy hiệu bạc13 Huy hiệu đồng1 gold badge7 silver badges13 bronze badges

Để chèn "một số dữ liệu" trước dòng mẫu cuối cùng .________ 14 +

1 abc
2 def
3 ghi
4 jkl
5 mno
6 pqr
7 stu
5 Giải pháp:
1 abc
2 def
3 ghi
4 jkl
5 mno
6 pqr
7 stu
4
+
1 abc
2 def
3 ghi
4 jkl
5 mno
6 pqr
7 stu
5
solution:

awk -v n="$(($(grep -c '^%end' inputfile) - 1))" \
'/^%end/{ if (++cnt == n) print "some data" }1' inputfile

Đầu ra:

%post
.....
.....
%end
%post
.....
.....
some data
%end
%post
.....
.....
%end

Đã trả lời ngày 9 tháng 5 năm 2018 lúc 15:25May 9, 2018 at 15:25

Hướng dẫn python insert line before match - dòng chèn python trước trận đấu

RomanperekhrestromanperkhrestRomanPerekhrest

29.1k2 Huy hiệu vàng41 Huy hiệu bạc63 Huy hiệu Đồng2 gold badges41 silver badges63 bronze badges