Tôi có hai biến var1
và var2
trên hai số dòng khác nhau. Nhiệm vụ của tôi là:
- Để 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. - Để 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
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
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
RomanperekhrestromanperkhrestRomanPerekhrest
29.1k2 Huy hiệu vàng41 Huy hiệu bạc63 Huy hiệu Đồng2 gold badges41 silver badges63 bronze badges