2012-04-22 62 views
7

Tôi đang tìm một số từ trong một tệp trong python. Sau khi tôi tìm thấy mỗi từ tôi cần phải đọc hai từ tiếp theo từ tập tin. Tôi đã tìm một số giải pháp nhưng tôi không thể tìm thấy chỉ đọc các từ tiếp theo.Đọc từ tiếp theo trong một tệp trong python

# offsetFile - file pointer 
# searchTerms - list of words 

for line in offsetFile: 
    for word in searchTerms: 
     if word in line: 
      # here get the next two terms after the word 

Cảm ơn bạn đã dành thời gian.

Cập nhật: Chỉ xuất hiện lần đầu tiên. Trên thực tế chỉ có một sự xuất hiện của từ là có thể trong trường hợp này.

file:

accept 42 2820 access 183 3145 accid 1 4589 algebra 153 16272 algem 4 17439 algol 202 6530 

từ: [ 'tiếp cận', 'đại số']

Tìm kiếm các tập tin khi tôi gặp phải 'tiếp cận' và 'đại số', tôi cần các giá trị của 183 3145 và 153 16272 tương ứng.

+1

Bạn nên đăng ví dụ về những gì tệp của bạn trông giống như e. – Akavall

+1

cho bình luận cuối cùng của bạn, bạn có nghĩa là hai từ tiếp theo sau từ bạn tìm thấy trong dòng? Bạn có thể cung cấp một số đầu vào/đầu ra mẫu không? – Levon

Trả lời

15

Cách dễ dàng để giải quyết vấn đề này là đọc tệp bằng cách sử dụng trình tạo ra một từ tại một thời điểm từ tệp.

def words(fileobj): 
    for line in fileobj: 
     for word in line.split(): 
      yield word 

Sau đó, để tìm từ mà bạn đang quan tâm và đọc hai chữ tiếp theo:

with open("offsetfile.txt") as wordfile: 
    wordgen = words(wordfile) 
    for word in wordgen: 
     if word in searchterms: # searchterms should be a set() to make this fast 
      break 
    else: 
     word = None    # makes sure word is None if the word wasn't found 

    foundwords = [word, next(wordgen, None), next(wordgen, None)] 

Bây giờ foundwords[0] là từ mà bạn tìm thấy, foundwords[1] là từ sau đó, và foundwords[2] là từ thứ hai sau nó. Nếu không có đủ từ, thì một hoặc nhiều thành phần của danh sách sẽ là None.

Sẽ phức tạp hơn một chút nếu bạn muốn buộc điều này chỉ khớp với một dòng, nhưng thông thường bạn có thể xem xét tệp chỉ như một chuỗi các từ.

+1

Tôi nghĩ rằng điều này là đúng, nhưng người hỏi nên xác định xem anh ta chỉ tìm kiếm sự xuất hiện đầu tiên của từ hoặc nhiều lần xuất hiện. –

+2

Có, bạn cần thêm một vòng lặp để tiếp tục nếu bạn muốn tìm nhiều lần xuất hiện. Thật dễ dàng để thêm. – kindall

+0

Cảm ơn bạn đã nhập mã. Tôi đã thực hiện một số thay đổi nhỏ và hoạt động hoàn hảo: line = line.split ("") –

2

Nếu bạn cần lấy chỉ có hai từ đầu tiên, chỉ làm điều đó:

 
offsetFile.readline().split()[:2] 
+1

"hai từ tiếp theo sau từ [tìm kiếm]" –

1
word = '3' #Your word 
delim = ',' #Your delim 

with open('test_file.txt') as f: 
    for line in f: 
     if word in line: 
      s_line = line.strip().split(delim) 
      two_words = (s_line[s_line.index(word) + 1],\ 
      s_line[s_line.index(word) + 2]) 
      break 
1
def searchTerm(offsetFile, searchTerms): 
      # remove any found words from this list; if empty we can exit 
      searchThese = searchTerms[:] 
      for line in offsetFile: 
        words_in_line = line.split() 
        # Use this list comprehension if always two numbers continue a word. 
        # Else use words_in_line. 
        for word in [w for i, w in enumerate(words_in_line) if i % 3 == 0]: 
          # No more words to search. 
          if not searchThese: 
            return 
          # Search remaining words. 
          if word in searchThese: 
            searchThese.remove(word) 
            i = words_in_line.index(word) 
            print words_in_line[i:i+3] 

Đối với 'tiếp cận', 'đại số' tôi nhận được kết quả này:

[' truy cập ',' 183 ',' 3145 ']
[' đại số ',' 153 ',' 16272 ']

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