2012-05-01 38 views
5

Tôi đang tạo một chương trình nhỏ để đọc và hiển thị văn bản từ một tài liệu. Tôi đã có một tệp thử nghiệm trông giống như sau:Có cách nào để đọc tệp .txt và lưu từng dòng vào bộ nhớ không?

12,12,12 
12,31,12 
1,5,3 
... 

và cứ tiếp tục như vậy. Bây giờ tôi muốn Python đọc từng dòng và lưu nó vào bộ nhớ, vì vậy khi bạn chọn hiển thị dữ liệu, nó sẽ hiển thị nó trong vỏ như sau:

1. 12,12,12 
2. 12,31,12 
... 

và cứ thế. Tôi có thể làm cái này như thế nào?

+8

Hiện chúng tôi mã của bạn cho đến nay – Jordonias

+3

'pydoc file.readlines' – bjarneh

+1

readlines @bjarneh() không phải là bộ nhớ hiệu quả. –

Trả lời

13

Tôi biết nó đã trả lời :) Để tóm tắt ở trên:

# It is a good idea to store the filename into a variable. 
# The variable can later become a function argument when the 
# code is converted to a function body. 
filename = 'data.txt' 

# Using the newer with construct to close the file automatically. 
with open(filename) as f: 
    data = f.readlines() 

# Or using the older approach and closing the filea explicitly. 
# Here the data is re-read again, do not use both ;) 
f = open(filename) 
data = f.readlines() 
f.close() 


# The data is of the list type. The Python list type is actually 
# a dynamic array. The lines contain also the \n; hence the .rstrip() 
for n, line in enumerate(data, 1): 
    print '{:2}.'.format(n), line.rstrip() 

print '-----------------' 

# You can later iterate through the list for other purpose, for 
# example to read them via the csv.reader. 
import csv 

reader = csv.reader(data) 
for row in reader: 
    print row 

It in trên giao diện điều khiển của tôi:

1. 12,12,12 
2. 12,31,12 
3. 1,5,3 
----------------- 
['12', '12', '12'] 
['12', '31', '12'] 
['1', '5', '3'] 
4

Hãy thử lưu trữ nó trong một mảng

f = open("file.txt", "r") 
a = [] 
for line in f: 
    a.append(line) 
+0

cách đơn giản để thực hiện. !! – Surya

+5

Còn được gọi là 'a = open (" file.txt "). Readlines()', hoặc tương đương 'a = list (mở (" file.txt "))'. Bạn thực sự nên sử dụng câu lệnh 'with' để đóng tệp; điều này dựa vào ngữ nghĩa đếm lại CPython để làm như vậy và sẽ không hoạt động như mong đợi, ví dụ: PyPy. – Dougal

+0

nó không chạy vào vấn đề nếu văn bản là rất lớn với số lượng nhiều dòng trong tập tin ?? – Surya

1

Bạn cũng có thể quan tâm đến các mô-đun csv. Nó cho phép bạn phân tích, đọc và ghi vào tập tin trong các giá trị bằng dấu phẩy (csv) định dạng ... mà ví dụ của bạn dường như là trong

Ví dụ:.

import csv 
reader = csv.reader(open('file.txt', 'rb'), delimiter=',') 
#Iterate over each row 
for idx,row in enumerate(reader): 
    print "%s: %s"%(idx+1,row) 
0
with open('test.txt') as o: 
    for i,t in enumerate(o.readlines(), 1): 
     print ("%s. %s"% (i, t)) 
0
#!/usr/local/bin/python 

t=1 

with open('sample.txt') as inf: 
    for line in inf: 
     num = line.strip() # contains current line 
     if num: 
      fn = '%d.txt' %t # gives the name to files t= 1.txt,2.txt,3.txt ..... 
      print('%d.txt Files splitted' %t) 
      #fn = '%s.txt' %num 
      with open(fn, 'w') as outf: 
       outf.write('%s\n' %num) # writes current line in opened fn file 
       t=t+1 
1

Cảm ơn giải pháp tuyệt vời @PePr. Ngoài ra, bạn có thể thử in tệp .txt bằng phương pháp tích hợp String.join(data). Ví dụ:

with open(filename) as f: 
    data = f.readlines() 
print(''.join(data)) 
Các vấn đề liên quan