2009-07-24 35 views
25

Giả sử tôi đang phân tích cú pháp tệp, sử dụng ; làm ký tự nhận xét. Tôi không muốn phân tích nhận xét. Vì vậy, nếu tôi một dòng trông như thế này:Trong Python 2.4, làm thế nào tôi có thể loại bỏ các ký tự sau ';'?

example.com.    600  IN  MX  8 s1b9.example.net ; hello! 

Có một/cách hơn-nhã dễ dải ký tự ra ngoài này:

rtr = '' 
for line in file: 
    trig = False 
    for char in line: 
     if not trig and char != ';': 
      rtr += char 
     else: 
      trig = True 
    if rtr[max(rtr)] != '\n': 
     rtr += '\n' 
+0

bạn đang sử dụng python <2.5? – SilentGhost

+0

Có, python2.4. Nên đã đề cập rằng trong ?? – lfaraone

+3

cũng python2.4 là ** hai phiên bản ** đằng sau phiên bản ổn định hiện tại. bạn nghĩ sao? – SilentGhost

Trả lời

85

tôi muốn khuyên bạn nên nói

line.split(";")[0] 

sẽ cung cấp cho bạn một chuỗi tất cả ký tự nhưng không bao gồm ký tự đầu tiên ";" tính cách. Nếu không ";" nhân vật có mặt, sau đó nó sẽ cho bạn toàn bộ dòng.

+14

+1 Bạn có thể sử dụng 1 cho param maxsplit để được hoàn hảo – Jiri

12

chỉ làm một tách trên dòng bằng cách bình luận sau đó được những yếu tố đầu tiên ví dụ

line.split(";")[0] 
4

Đối với Python 2.5 hoặc cao hơn, tôi sẽ sử dụng partition phương pháp:

rtr = line.partition(';')[0].rstrip() + '\n' 
+0

không có sẵn cho phiên bản <2.5 ++ – ghostdog74

+2

@ ghostdog74: phiên bản ổn định của python là 2.6 và 3.1 – SilentGhost

+1

@SG, điều đó tốt, nhưng vẫn còn, nếu một là vẫn sử dụng <2.5 ++ trong sản xuất, họ sẽ không có sự sang trọng này. – ghostdog74

2
file = open(r'c:\temp\test.txt', 'r') 
for line in file: print 
    line.split(";")[0].strip() 
+2

sửa cú pháp của bạn –

1

Reading, tách, tước và gia nhập dòng với newline tất cả trong một dòng python:

rtr = '\n'.join(line.split(';')[0].strip() for line in open(r'c:\temp\test.txt', 'r')) 
-2

Tôi đã không thử nghiệm này với python nhưng tôi sử dụng mã tương tự khác ở đâu.

import re 
content = open(r'c:\temp\test.txt', 'r').read() 
content = re.sub(";.+", "\n") 
+1

re.sub() của bạn thiếu đối số và do đó sẽ không chạy - rất may mắn vì ** nó sẽ làm hỏng 'đầu tiên'; trong tệp và mọi thứ sau đó ** –

2

Vì vậy, bạn sẽ muốn chia dòng trên dấu chấm phẩy đầu tiên, lấy mọi thứ trước đó, loại bỏ mọi khoảng trống kéo dài và thêm ký tự dòng mới.

rtr = line.split(";", 1)[0].rstrip() + '\n' 

Các liên kết đến tài liệu:

+0

liên kết bạn cung cấp và các phương pháp bạn sử dụng không giống nhau – SilentGhost

0

Đây là một cách khác:

 
In [6]: line = "foo;bar" 
In [7]: line[:line.find(";")] + "\n" 
Out[7]: 'foo\n' 
+0

nếu line == "fubar", tạo ra "fuba \ n" ... sửa vấn đề trong một lớp lót tạo ra : 'line [: None nếu line.find ("; ") == -1 else line.find ("; ")]' (mà tôi chắc chắn không đề xuất như một ý tưởng hay). –

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