2012-02-19 34 views
27

Đây là vấn đề của tôi.Dải Python với n

Tôi đang cố gắng đọc một tệp văn bản và sau đó chuyển đổi các dòng thành phao. Các tập tin văn bản có \n\t trong nó mặc dù tôi không biết làm thế nào để thoát khỏi nó.

Tôi đã thử sử dụng line.strip() nhưng nó đã không gỡ bỏ và tôi gặp lỗi khi tôi muốn chuyển đổi nội dung để nổi. Sau đó tôi đã thử line.strip("\n") nhưng điều đó không hoạt động. Chương trình của tôi hoạt động tốt khi tôi lấy ra \t\n từ tệp văn bản, nhưng nó là một phần của bài tập để làm cho nó hoạt động với chúng.

Tôi thực sự không biết tại sao tính năng này không hoạt động. Cảm ơn vì bất kì sự giúp đỡ.

+6

Bạn có thể cung cấp đoạn trích của tệp văn bản của mình không? – Josh

+2

Dải chỉ xóa khoảng trắng từ đầu và cuối dòng. Nếu bạn có các tab ở giữa dòng, nó sẽ không xóa các tab đó. – Swiss

+2

Đáng chú ý rằng "\ n" không phải là ký tự trả về trên tất cả các hệ thống. Bạn có thể cần phải xóa "\ n", "\ r" hoặc "\ r \ n". Nếu bạn hiển thị một số mã hoàn chỉnh bạn đã thử và nhập dữ liệu, điều này có thể dễ dàng hơn để giải quyết. –

Trả lời

1

thư viện pythons csv là tốt cho việc này.

http://docs.python.org/library/csv.html

CSV = dấu phẩy giá trị tách, nhưng nếu bạn đặt delimiter = \ t, sau đó nó hoạt động cho các giá trị tách tab quá.

62

Bạn sẽ có thể sử dụng line.strip('\n')line.strip('\t'). Nhưng những thay đổi này không sửa đổi biến số line ... chúng chỉ trả về chuỗi bị tước \n\t. Vì vậy, bạn sẽ phải làm điều gì đó như

line = line.strip('\n') 
line = line.strip('\t') 

Điều đó sẽ hiệu quả để xóa khỏi đầu và cuối. Nếu bạn có \n\t ở giữa của chuỗi, bạn cần làm

line = line.replace('\n','') 
line = line.replace('\t','') 

để thay thế \n\t với hư vô.

0

Thông thường, tùy thuộc vào cách bạn đọc các dòng, để loại bỏ \ n khỏi đường dây của tôi, bạn có thể lấy đường [: - 1] vì \ n là ký tự cuối cùng của dòng của tôi.

Đối với '\ t' bạn có thể sử dụng thay thế() hoặc dải()

1

Nếu bạn đang cố gắng để chuyển đổi dòng nổi phân cách bằng ký tự tab, sau đó chỉ cần float(line) sẽ cố gắng để chuyển đổi toàn bộ dòng vào một phao, mà sẽ thất bại nếu có nhiều hơn một. Sử dụng strip để loại bỏ khoảng trống đầu và cuối sẽ không giúp vấn đề cơ bản đó.

Có thể bạn cần split mỗi dòng thành từng miếng và làm gì đó với từng phần?

2

Làm thế nào để sử dụng mẫu python regex?

import re 
f = open('test.txt', 'r') 
strings = re.findall(r"\S+", f.read()) 

Và đối với trường hợp của bạn của line.strip() sẽ không làm việc vì Python chỉ loại bỏ các nhân vật ở đầu và đuôi

Từ Python Docs - Return một bản sao của chuỗi với ở đầu và đuôi ký tự loại bỏ. Nếu các ký tự bị bỏ qua hoặc Không, các ký tự trắng sẽ bị xóa.Nếu được cho và không phải Không, ký tự phải là một chuỗi; các ký tự trong chuỗi sẽ bị tước khỏi cả hai đầu của chuỗi mà phương thức này được gọi.

16

Phương pháp strip() loại bỏ khoảng trắng theo mặc định, do đó không cần phải gọi nó với các thông số như '\ t' hoặc '\ n'. Tuy nhiên, các chuỗi trong Python là không thay đổi và không thể sửa đổi, tức là cuộc gọi line.strip() sẽ không thay đổi đối tượng line. Kết quả là một chuỗi mới được trả về bởi cuộc gọi.

Như đã đề cập, nó sẽ giúp ích nếu bạn đăng một ví dụ từ tệp đầu vào của mình. Nếu có nhiều số trên mỗi dòng, strip() không phải là chức năng để sử dụng. Thay vào đó, bạn nên sử dụng split(), cũng là một phương thức chuỗi.

Để kết luận, giả định rằng mỗi dòng chứa một số nổi cách nhau bởi khoảng trắng, và rằng bạn muốn xây dựng một danh sách tất cả các con số, bạn có thể thử như sau:

floats = [] 
with open(filename) as f: 
    for line in f: 
     floats.extend([float(number) for number in line.split()]) 
0

Bạn có thể sử dụng:

mylist = [] 
# Assuming that you have loaded data into a lines variable. 
for line in lines: 
    mylist.append(line.strip().split('\t') 

để lấy danh sách trăn chỉ với giá trị trường cho tất cả các dòng dữ liệu.