2012-01-15 35 views
6

Tôi có một cơ sở dữ liệu:tách một chuỗi dài biến thành nhiều bộ phận trong python

Như bạn có thể thấy trong cột 'desc', các văn bản có độ dài biến (có nghĩa là không có hai chuỗi tôi kéo từ cơ sở dữ liệu này sẽ có cùng độ dài). Cuối cùng tôi sẽ thêm nhiều mục vào cơ sở dữ liệu này, nhưng đây là những gì tôi đang thử nghiệm và bắt đầu với tại thời điểm này.

Ngay bây giờ, tôi có mã python sau để lấy các khối của chuỗi và hiển thị chúng:

cmd = input(Enter command:) 
sql = "SELECT cmd,`desc` FROM table WHERE cmd = '"+ cmd +"'" 
cursor.execute(sql) 
result = cursor.fetchall() 
for row in result: 
    print("Command: "+ row[0] +":\n") 
    print("Description: "+ row[1][:40] +"\n") 
    if (len(row[1]) > 40): 
     print(row[1][40:85]) 
    if (len(row[1]) > 85): 
     print(row[1][85:130]) 
    if (len(row[1]) > 130): 
     print(row[1][130:165]) 
    if (len(row[1]) > 165): 
     print(row[1][165:]) 

Việc chia tách ở đây làm việc đến mức, ví dụ:

Command: gần :
Mô tả: Lệnh này sẽ tạo một 'đóng' nhưngto
n trong cửa sổ thư cho lời gọi char
acter. Nếu không có cửa sổ nào hiện trên màn hình, t
việc thực thi tập lệnh sẽ kết thúc.

Như bạn có thể thấy với ví dụ ở trên đầu ra, phần tách làm cho một số ký tự bị cắt ngang ở giữa. Với thực tế rằng các chuỗi có thể có độ dài bất kỳ giữa 20 ký tự và lên đến 190, và tôi muốn chia chuỗi thành các khối nói ... 8 từ mỗi vì không gian hạn chế, làm thế nào tôi sẽ đi về việc này?

+0

sử dụng thay thế tham số thay vì tạo chuỗi sql bằng cách thủ công, ví dụ: 'cursor.execute ('select * from commands where cmd =?', (Cmd,))'. Bạn không cần phải gọi 'cursor.fetchall()' bạn có thể lặp qua nó trực tiếp: 'cho hàng trong con trỏ: ...' – jfs

Trả lời

2

Chia tách trên các khoảng trắng để tách các từ, sau đó ghép 8 tại một thời điểm với dấu cách làm dấu phân cách.

content = "This is some sentence that has more than eight words" 
content = content.split(" ") 
print content 
['This', 'is', 'some', 'sentence', 'that', 'has', 'more', 'than', 'eight', 'words'] 
print(" ".join(content[0:8])) 
This is some sentence that has more than 
+0

Cảm ơn! Đây là những gì tôi đang tìm kiếm, bây giờ. – Jguy

1

Cắt bằng lời nói thay cho nhân vật sử dụng python textwrap mô-đun:

>>> import textwrap 
>>> text = 'asdd sdfdf asdsg asfgfhj' 
>>> s = textwrap.wrap(text, width=10) # <- example 10 characters 
>>> s 
['asdd sdfdf', 'asdsg', 'asfgfhj'] 
>>> print '\n'.join(s) 
asdd sdfdf 
asdsg 
asfgfhj 
>>> 
16

Kiểm tra các textwrap module.

>>> import textwrap 
>>> 
>>> s = "This command will create a 'close' button in the message window for the invoking character. If no window is currently on screen, the script execution will end." 
>>> 
>>> wrapped = textwrap.wrap(s, 40) 
>>> 
>>> for line in wrapped: 
...  print line 
... 
This command will create a 'close' 
button in the message window for the 
invoking character. If no window is 
currently on screen, the script 
execution will end. 

Bạn có thể thực hiện rất nhiều cấu hình của TextWrapper.

+0

TIL textwrap, rất hữu ích – JustinDanielson

+0

Điều này tồn tại ?! Các thư viện chuẩn python không bao giờ làm tôi ngạc nhiên. +1 – senderle

+0

Tôi đang thực hiện một mẹo bẩn để hoàn thành công việc. Tôi không có ý tưởng một cái gì đó như thế này đã có sẵn. Tôi chắc chắn sẽ xem xét một khi tôi có cơ hội. Cảm ơn! – Jguy

Các vấn đề liên quan