Hướng dẫn normalize whitespace python - bình thường hóa python khoảng trắng

Tôi đang xây dựng một trích xuất dữ liệu bằng cách sử dụng phế liệu và muốn bình thường hóa một chuỗi thô được rút ra khỏi tài liệu HTML. Đây là một chuỗi ví dụ:

  Sapphire RX460 OC  2/4GB

Lưu ý hai nhóm của hai khoảng trắng tạo ra chuỗi chữ và giữa

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
4 và
product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
5.

Python cung cấp trang trí như được mô tả trong Làm thế nào để tôi cắt không gian trắng với Python? Nhưng điều đó sẽ không xử lý hai khoảng trống giữa

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
4 và
product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
5, mà tôi cần sụp đổ vào một không gian duy nhất.

Tôi đã thử sử dụng

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
8 từ XPath trong khi trích xuất dữ liệu với bộ chọn Scrapy của tôi và hoạt động nhưng phần dài dòng với sự trôi dạt mạnh mẽ:

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()

Có một cách thanh lịch để bình thường hóa khoảng trắng bằng cách sử dụng Python? Nếu không phải là một lớp lót, có cách nào tôi có thể chia dòng trên thành một thứ gì đó dễ đọc hơn mà không cần ném lỗi thụt lề, ví dụ:

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()

Hỏi ngày 30 tháng 9 năm 2017 lúc 9:04Sep 30, 2017 at 9:04

Hướng dẫn normalize whitespace python - bình thường hóa python khoảng trắng

0

Bạn có thể dùng:

" ".join(s.split())

trong đó

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
9 là chuỗi của bạn.

Đã trả lời ngày 30 tháng 9 năm 2017 lúc 9:37Sep 30, 2017 at 9:37

Tom Karzestom KarzesTom Karzes

20.8K2 Huy hiệu vàng20 Huy hiệu bạc37 Huy hiệu đồng2 gold badges20 silver badges37 bronze badges

0

Thay vì sử dụng Regex's cho việc này, một giải pháp hiệu quả hơn là sử dụng tùy chọn nối/chia, quan sát:

>>> timeit.Timer((lambda:' '.join(' Sapphire RX460 OC  2/4GB'.split()))).timeit()
0.7263979911804199

>>> def f():
        return re.sub(" +", ' ', "  Sapphire RX460 OC  2/4GB").split()

>>> timeit.Timer(f).timeit()
4.163465976715088

Đã trả lời ngày 30 tháng 9 năm 2017 lúc 9:44Sep 30, 2017 at 9:44

hd1hd1hd1

33.2K5 Huy hiệu vàng79 Huy hiệu bạc88 Huy hiệu đồng5 gold badges79 silver badges88 bronze badges

2

Bạn có thể sử dụng một chức năng như bên dưới với biểu thức thông thường để quét các không gian liên tục và thay thế chúng bằng 1 không gian

import re

def clean_data(data):
    return re.sub(" {2,}", " ", data.strip())

product_title = clean(product.css('h3::text').extract_first())

Và sau đó cải thiện chức năng sạch dù sao bạn thích nó

Đã trả lời ngày 30 tháng 9 năm 2017 lúc 9:25Sep 30, 2017 at 9:25

Tarun Lalwanitarun LalwaniTarun Lalwani

Huy hiệu vàng 137K88 gold badges182 silver badges248 bronze badges

1

72

Nội dung chính ShowShow

  • Làm cách nào để in danh sách mà không có khoảng trống?
  • Làm thế nào để bạn tước một không gian trong Python?
  • RizarizaSep 23, 2016 at 19:22
  • Làm thế nào để bạn loại bỏ nhiều khoảng trống khỏi một chuỗi trong Python?

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more..Show

  • Làm cách nào để in danh sách mà không có khoảng trống?
  • Làm thế nào để bạn tước một không gian trong Python?
  • Đã trả lời ngày 13 tháng 7 năm 2010 lúc 0:4411 gold badges138 silver badges184 bronze badgesstrip() method to remove whitespace and characters from the beginning and the end of a string. Use the . lstrip() method to remove whitespace and characters only from the beginning of a string.
  • Làm thế nào để bạn loại bỏ nhiều khoảng trống khỏi một chuỗi trong Python?

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more..
Learn more.

Tôi có một danh sách các đối tượng được thêm vào cơ sở dữ liệu MySQL và chứa khoảng trắng. Tôi muốn loại bỏ các khoảng trống như bên dưới, nhưng mã tôi sử dụng không hoạt động?

hello = ['999 ',' 666 ']

k = []

for i in hello:
    str(i).replace(' ','')
    k.append(i)

print k

hỏi ngày 12 tháng 7 năm 2010 lúc 23:04Jul 12, 2010 at 23:04Jul 12, 2010 at 23:04

3

Các chuỗi trong Python là bất biến (có nghĩa là dữ liệu của chúng không thể được sửa đổi) vì vậy phương thức thay thế không sửa đổi chuỗi - nó trả về một chuỗi mới. Bạn có thể sửa mã của mình như sau:

for i in hello:
    j = i.replace(' ','')
    k.append(j)

Tuy nhiên, một cách tốt hơn để đạt được mục tiêu của bạn là sử dụng khả năng hiểu danh sách. Ví dụ: mã sau đây sẽ loại bỏ các không gian dẫn đầu và dấu ngoặc ra khỏi mỗi chuỗi trong danh sách bằng cách sử dụng

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()
0:

hello = [x.strip(' ') for x in hello]

Đã trả lời ngày 12 tháng 7 năm 2010 lúc 23:06Jul 12, 2010 at 23:06Jul 12, 2010 at 23:06

Mark Byersmark ByersMark ByersMark Byers

Nội dung chính Show187 gold badges1552 silver badges1440 bronze badges

5

Nội dung chính ShowShow

>>> import timeit
>>> hello = ['999 ',' 666 ']

>>> t1 = lambda: map(str.strip, hello)
>>> timeit.timeit(t1)
1.825870468015296

>>> t2 = lambda: list(map(str.strip, hello))
>>> timeit.timeit(t2)
2.2825958750515269

>>> t3 = lambda: [num.strip() for num in hello]
>>> timeit.timeit(t3)
1.4320335103944899

>>> t4 = lambda: [num.replace(' ', '') for num in hello]
>>> timeit.timeit(t4)
1.7670568718943969

Làm cách nào để xóa một chuỗi khỏi danh sách trong Python? Jul 13, 2010 at 0:44

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.Learn more.Learn more.riza

hỏi ngày 12 tháng 7 năm 2010 lúc 23:04Jul 12, 2010 at 23:04Jul 12, 2010 at 23:047 gold badges28 silver badges29 bronze badges

2

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
0

Đã trả lời ngày 12 tháng 7 năm 2010 lúc 23:06Jul 12, 2010 at 23:06Jul 12, 2010 at 23:06Jul 12, 2010 at 23:05

Mark Byersmark ByersMark ByersMark Byersyedpodtrzitko

784K187 Huy hiệu vàng1552 Huy hiệu bạc1440 Huy hiệu đồng187 gold badges1552 silver badges1440 bronze badges187 gold badges1552 silver badges1440 bronze badges2 gold badges36 silver badges39 bronze badges

2

Danh sách hiểu

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()
1 là nhanh nhất.

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
1

Đã trả lời ngày 12 tháng 7 năm 2010 lúc 23:06Jul 12, 2010 at 23:06Jul 12, 2010 at 23:06

Mark Byersmark ByersMark Byers

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
2

784K187 Huy hiệu vàng1552 Huy hiệu bạc1440 Huy hiệu đồng187 gold badges1552 silver badges1440 bronze badgesJul 13, 2010 at 0:13Jul 13, 2010 at 0:13

Danh sách hiểu

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()
1 là nhanh nhất.John MachinJohn Machin

Đã trả lời ngày 13 tháng 7 năm 2010 lúc 0:44Jul 13, 2010 at 0:4411 gold badges138 silver badges184 bronze badges11 gold badges138 silver badges184 bronze badges

product_title = product.css('h3').xpath('normalize-space((text()))').extract_first()
3

RizarizarizaSep 23, 2016 at 19:22Sep 23, 2016 at 19:22

1

15.4K7 Huy hiệu vàng28 Huy hiệu bạc29 Huy hiệu đồng7 gold badges28 silver badges29 bronze badges

Đã trả lời ngày 12 tháng 7 năm 2010 lúc 23:05Jul 12, 2010 at 23:05Jul 12, 2010 at 23:12Jul 12, 2010 at 23:12

yedpodtrzitkoyedpodtrzitkoyedpodtrzitkoallonymallonym

8,5112 Huy hiệu vàng36 Huy hiệu bạc39 Huy hiệu Đồng2 gold badges36 silver badges39 bronze badges10 silver badges18 bronze badges10 silver badges18 bronze badges

Làm cách nào để in danh sách mà không có khoảng trống?

Phương thức chuỗi trả về chuỗi sửa đổi...

Mark Byersmark Byers

784K187 Huy hiệu vàng1552 Huy hiệu bạc1440 Huy hiệu đồngJul 13, 2010 at 0:13

Danh sách hiểu

product_title = product.css('h3')
    .xpath('normalize-space((text()))')
    .extract_first()
1 là nhanh nhất.John Machin

Đã trả lời ngày 13 tháng 7 năm 2010 lúc 0:44Jul 13, 2010 at 0:4411 gold badges138 silver badges184 bronze badges

RizarizarizaSep 23, 2016 at 19:22 strip() method to remove whitespace and characters from the beginning and the end of a string. Use the . lstrip() method to remove whitespace and characters only from the beginning of a string.

15.4K7 Huy hiệu vàng28 Huy hiệu bạc29 Huy hiệu đồng7 gold badges28 silver badges29 bronze badges

Đã trả lời ngày 12 tháng 7 năm 2010 lúc 23:05Jul 12, 2010 at 23:05Jul 12, 2010 at 23:12 to remove a string from a list, e.g. my_list. pop(0) . The list. pop() method will remove the string at the specified position and will return the removed value.

yedpodtrzitkoyedpodtrzitkoyedpodtrzitkoallonym

8,5112 Huy hiệu vàng36 Huy hiệu bạc39 Huy hiệu Đồng2 gold badges36 silver badges39 bronze badges10 silver badges18 bronze badges.

Làm cách nào để in danh sách mà không có khoảng trống?

Phương thức chuỗi trả về chuỗi sửa đổi..

Mark Byersmark Byers

784K187 Huy hiệu vàng1552 Huy hiệu bạc1440 Huy hiệu đồngJul 13, 2010 at 0:13

Làm thế nào để bạn tước một không gian trong Python?

Mark Byersmark ByersMark Byers