Tôi có chuỗi lớn mà tôi chia cho các dòng mới. Làm cách nào để xóa tất cả các dòng trống, chỉ (khoảng trắng)?Cách xóa các dòng trống có hoặc không có khoảng trống trong Python
mã giả:
for stuff in largestring:
remove stuff that is blank
Tôi có chuỗi lớn mà tôi chia cho các dòng mới. Làm cách nào để xóa tất cả các dòng trống, chỉ (khoảng trắng)?Cách xóa các dòng trống có hoặc không có khoảng trống trong Python
mã giả:
for stuff in largestring:
remove stuff that is blank
Sử dụng regex:
if re.match(r'^\s*$', line):
# line is empty (has only the following: \t\n\r and whitespace)
Sử dụng regex + filter()
:
filtered = filter(lambda x: not re.match(r'^\s*$', x), original)
Như đã thấy trên codepad.
Cảm ơn tất cả các kết quả, tuy nhiên, giải pháp này là chính xác những gì tôi đã được tìm kiếm! Cảm ơn rất nhiều giải pháp của gimel – user428370
, với việc gia nhập lại văn bản sau đó, mang lại hiệu suất tốt hơn nhiều. Tôi đã so sánh hai giải pháp trên một văn bản nhỏ (10 dòng nếu 3 dòng trống). Dưới đây là kết quả: regex: '1000 vòng, tốt nhất là 3: 452 chúng tôi trên mỗi vòng lặp'; tham gia, chia nhỏ và tách: '100000 vòng, tốt nhất là 3: 5,41 chúng tôi trên mỗi vòng lặp ' – m01
danh sách Cố gắng hiểu và string.strip()
:
>>> mystr = "L1\nL2\n\nL3\nL4\n \n\nL5"
>>> mystr.split('\n')
['L1', 'L2', '', 'L3', 'L4', ' ', '', 'L5']
>>> [line for line in mystr.split('\n') if line.strip() != '']
['L1', 'L2', 'L3', 'L4', 'L5']
Edit: Wow, tôi đoán bỏ qua rõ ràng là không ổn.
lines = bigstring.split()
lines = [line for line in lines if line.strip()]
Điều đó sẽ hoạt động với các dòng = ['Line \ n', '\ n', 'Line \ n'] nhưng đầu vào là 'Dòng \ n \ nLine \ n'. –
@Walter: Trên thực tế, nếu bạn đã sử dụng 'Line \ n \ nLine \ n'.split() như bạn nên có, nó sẽ hoạt động tốt. – nmichaels
Tôi cũng đã cố gắng regexp và danh sách các giải pháp, và danh sách một trong nhanh hơn.
Đây là giải pháp của tôi (bởi câu trả lời trước):
text = "\n".join([ll.rstrip() for ll in original_text.splitlines() if ll.strip()])
Nếu bạn không sẵn sàng để thử regex (mà bạn nên), bạn có thể sử dụng này:
s.replace('\n\n','\n')
Lặp lại vài này thời gian để đảm bảo không còn dòng trống. Hoặc chaining các lệnh:
s.replace('\n\n','\n').replace('\n\n','\n')
Ví dụ: bạn có thể muốn sử dụng cụm từ thông dụng. "Lặp lại một số dòng để chắc chắn" không phải là một ý tưởng tốt khi bạn đang mã hóa, vì bạn có thể để lại những thứ chưa được giải quyết hoặc lãng phí thời gian chạy một cái gì đó nhiều lần hơn cần thiết. – Enrico
+1 để regex, nhưng như là một hack lười biếng (hoặc nếu nhập khẩu các mô-đun regex là quá chậm), bạn có thể thay thế chuỗi tuyên bố: 's.replace ('\ n \ n', '\ n'). Thay thế (' \ n \ n ',' \ n ') ' Thử nghiệm trên 3.6. –
@evan_b không nghĩ đến chuỗi lệnh. Cái nào sẽ được thực hiện trước? – Ooker
phiên bản của tôi:
while '' in all_lines:
all_lines.pop(all_lines.index(''))
while True:
try:
all_lines.remove('')
except ValueError:
break
Vui lòng giải thích cách mã của bạn giải quyết được sự cố –
Điều gì không rõ ràng? – Radren
komodo edit remove blank lines
Trong Komodo chỉnh sửa nhấn Ctrl + H sao Mark (Treat như regex), Click vào trên liên kết để xem ảnh chụp nhanh.
Tương tự như những gì @NullUserException nói, đây là cách tôi viết nó:
removedWhitespce = re.sub(r'^\s*$', '', line)
[Đối với bản thân mình, tôi thấy câu trả lời ở đây là giải pháp tốt nhất] (http://stackoverflow.com/questions/1140958/whats-a-quick-one-liner-to-remove-empty-dòng-từ-a-python-string # answer-24172715) – Dmitriy
Một lớp lót để xóa các dòng trống (không có khoảng trắng) là [this] (http://stackoverflow.com/a/1140966/2373278). Dòng tiêu đề câu hỏi có thể được thay đổi thành 'Xoá các dòng trống với khoảng trắng chỉ trong python'. – ViFI