2008-11-29 29 views
26

Tôi đang cố mở một tệp và tạo danh sách với mỗi dòng được đọc từ tệp.Tạo một Danh sách chứa từng Dòng của Tệp

i=0 
    List=[""] 
    for Line in inFile: 
     List[i]=Line.split(",") 
     i+=1 
    print List 

Nhưng mã mẫu này cho tôi lỗi do i+=1 nói rằng index is out of range. Vấn đề của tôi ở đây là gì? Làm thế nào tôi có thể viết mã để tăng danh sách của tôi với mỗi dòng mới trong InFile?

Trả lời

58

Nó dễ dàng hơn rất nhiều so với rằng:

List = open("filename.txt").readlines() 

này trả về một danh sách của mỗi dòng trong file.

+0

WoooW Chỉ cần hoàn hảo! Nó đã làm việc. Btw tưởng tượng đó không phải là một tập tin ... Nhưng tôi muốn tạo một danh sách năng động ... Làm thế nào tôi có thể nối thêm một phần tử vào nó? như thể là một arrayList? ty rất nhiều – UcanDoIt

+0

Phương thức chắp thêm sẽ thực hiện thủ thuật. Ví dụ: xs.append (dòng) –

+2

điều gì về việc đóng tệp? – matlabit

-5

Tôi không chắc chắn về Python nhưng hầu hết các ngôn ngữ đều có chức năng push/append cho mảng.

8
my_list = [line.split(',') for line in open("filename.txt")] 
+2

Tôi sợ nhảy vào một danh sách hiểu cho một người nào đó vẫn cố gắng để hiểu python cơ bản có thể là một chút lớn của một bước. :) – Dustin

+0

Tôi cho rằng bạn đúng ... – orip

+0

Dustin là đúng, tuy nhiên orip cung cấp câu trả lời đúng nhất cho câu hỏi. – tzot

1

Một tệp là gần như một danh sách các dòng. Bạn có thể sử dụng nó một cách nhỏ gọn trong một số cho vòng lặp.

myFile= open("SomeFile.txt", "r") 
for x in myFile: 
    print x 
myFile.close() 

Hoặc, nếu bạn muốn danh sách thực sự của các dòng, chỉ cần tạo danh sách từ tệp.

myFile= open("SomeFile.txt", "r") 
myLines = list(myFile) 
myFile.close() 
print len(myLines), myLines 

Bạn không thể làm someList[i] để đặt một mới mục ở phần cuối của một danh sách. Bạn phải làm someList.append(i).

Ngoài ra, không bao giờ bắt đầu một tên biến đơn giản với một chữ hoa. List làm lẫn lộn những người biết Python.

Ngoài ra, không bao giờ sử dụng tên được tích hợp làm biến. list là một kiểu dữ liệu hiện có, và sử dụng nó như một biến gây nhầm lẫn cho những người biết Python.

+0

Làm thế nào tôi có thể dựa vào các tiêu chuẩn mã hóa python? Cảm ơn, tôi không biết bạn sử dụng tên có thể thay đổi bằng chữ thường ... bất kỳ lý do đặc biệt nào cho điều đó? Ty – UcanDoIt

+0

Trong khi bạn đang ở trên các quy ước, PEP8 cũng có điều gì đó để nói về các dấu cách bên trong dấu ngoặc đơn. :) – Dustin

+0

Xem http://www.python.org/dev/peps/pep-0008/, cũng xem http://stackoverflow.com/questions/159720/what-is-the-naming-convention-in-python -cho-biến-và-chức năng-tên –

1

f.readlines() trả về một danh sách có chứa mỗi dòng như một mục trong danh sách

nếu bạn muốn eachline được chia (""), bạn có thể sử dụng danh sách comprehensions

[ list.split(",") for line in file ] 
7

Vui lòng đọc PEP8. Bạn đang lắc lư khá xa các công ước python.

Nếu bạn muốn có một danh sách liệt kê của mỗi dòng chia bởi dấu phẩy, tôi muốn làm điều này:

l = [] 
for line in in_file: 
    l.append(line.split(',')) 

Bạn sẽ nhận được một dòng mới trên mỗi bản ghi. Nếu bạn không muốn điều đó:

l = [] 
for line in in_file: 
    l.append(line.rstrip().split(',')) 
+0

cảm ơn rất nhiều. rất hữu ích... – UcanDoIt

22

tôi đã làm nó theo cách này

lines_list = open('file.txt').read().splitlines() 

Mỗi dòng đi kèm với kết thúc của các nhân vật dòng (\ n \ r); theo cách này, các ký tự bị xóa.

0

Giả sử bạn cũng muốn dải khoảng trắng ở đầu và cuối mỗi dòng, bạn có thể lập bản đồ các chức năng chuỗi dải vào danh sách được trả về bởi readlines:

map(str.strip, open('filename').readlines()) 
Các vấn đề liên quan