Python Lưu vào tệp


80

Tôi muốn lưu một chuỗi vào tệp bằng chương trình python có tên Failed.py

Đây là những gì tôi có cho đến nay:

myFile = open('today','r')

ips = {}

for line in myFile:
    parts = line.split(' ')
    if parts[1] == 'Failure':
        if parts[0] in ips:
            ips[pars[0]] += 1
        else:
            ips[parts[0]] = 0

for ip in [k for k, v in ips.iteritems() if v >=5]:
    #write to file called Failed.py

2
Vì tò mò thuần túy: có cách nào để biến một câu trả lời thành câu trả lời được chấp nhận không? (Stefan dường như không hoạt động trong nhiều năm)
Wolf

Vấn đề thực tế là gì?
user207421

Câu trả lời:


170
file = open('Failed.py', 'w')
file.write('whatever')
file.close()

Đây là một phiên bản pythonic hơn, tự động đóng tệp, ngay cả khi có một ngoại lệ trong khối được bọc:

with open('Failed.py', 'w') as file:
    file.write('whatever')

2
filekhông phải là một từ được bảo hộ tại python, không có nhu cầu sử dụng file_, trừ khi phong cách của bạn hướng dẫn mã hóa đòi hỏi sự _hậu tố trên biến trong bất cứ điều gì (file, chức năng, lớp học, phương pháp) bối cảnh này diễn ra trong.
zstewart

6
Nó không phải là về phong cách mã hóa. filelà chức năng tích hợp như nhiều chức năng khác . Bạn không nên phủ bóng các hàm tích hợp này với các biến khác.
warvariuc

1
fileđã không được chấp nhận và bị xóa trong python 3, vì vậy bạn hoàn toàn có thể sử dụng ở đó. Tôi không thấy thẻ 2.7 trên câu hỏi, và tôi thường sử dụng python 3 ...
zstewart

2
@Anatoly bạn không đóng tệp
warvariuc 14/02/17

3
@warvariuc cảm ơn bạn, bạn nói đúng, thì đây có vẻ không phải là phương pháp hay nhất
Anatoly Vasilyev

20

Bạn cần mở lại tệp bằng cách sử dụng open(), nhưng thời gian này trôi qua 'w'để cho biết rằng bạn muốn ghi vào tệp. Tôi cũng khuyên bạn nên sử dụng withđể đảm bảo rằng tệp sẽ được đóng khi bạn viết xong.

with open('Failed.txt', 'w') as f:
    for ip in [k for k, v in ips.iteritems() if v >=5]:
        f.write(ip)

Đương nhiên, bạn có thể muốn đưa dòng mới hoặc định dạng khác vào đầu ra của mình, nhưng những điều cơ bản là như trên.

Vấn đề tương tự với việc đóng tệp của bạn cũng áp dụng cho mã đọc. Điều đó sẽ trông như thế này:

ips = {}
with open('today','r') as myFile:
    for line in myFile:
        parts = line.split(' ')
        if parts[1] == 'Failure':
            if parts[0] in ips:
                ips[pars[0]] += 1
            else:
                ips[parts[0]] = 0

2

Bạn có thể sử dụng chức năng này:

def saveListToFile(listname, pathtosave):
    file1 = open(pathtosave,"w") 
    for i in listname:
        file1.writelines("{}\n".format(i))    
    file1.close() 

# to save:
saveListToFile(list, path)

1
myFile = open('today','r')

ips = {}

for line in myFile:
    parts = line.split()
    if parts[1] == 'Failure':
        ips.setdefault(parts[0], 0)
        ips[parts[0]] += 1

of = open('failed.py', 'w')
for ip in [k for k, v in ips.iteritems() if v >=5]:
    of.write(k+'\n')

Kiểm tra setdefault, nó làm cho mã dễ đọc hơn một chút. Sau đó, bạn kết xuất dữ liệu của mình với phương thức ghi của đối tượng tệp.


1
Chính xác, những gì anh ấy nói. Nối một of.close vào cuối ở đó. Nếu không, bạn giả sử GC sẽ đóng tệp. Rõ ràng là tốt hơn ngầm. Cảm ơn.
jaime

1
@jaime Thực sự bạn cần làm nhiều việc hơn là chỉ gọi điện close. Bạn cần phải làm điều đó trong một khối cuối cùng để bảo vệ khỏi các trường hợp ngoại lệ. Cách thành ngữ là sử dụng withtrình xử lý ngữ cảnh.
David Heffernan

1
Vâng, cảm ơn. Điều đó thoáng qua trong đầu tôi, nhưng tôi lo lắng về việc giải thích khi cuối cùng được gọi. Sau đó, sau khi đọc bình luận của bạn, tôi nhận ra anh ấy đã gắn thẻ câu hỏi là python-2.7. Cảm ơn.
jaime

1

Để ghi vào một tệp bằng Python, chúng ta cần mở nó ở chế độ ghi w, nối thêm ahoặc xchế độ tạo độc quyền .

Chúng ta cần phải cẩn thận với wchế độ này, vì nó sẽ ghi đè lên tệp nếu nó đã tồn tại. Do đó, tất cả dữ liệu trước đó sẽ bị xóa.

Việc ghi một chuỗi hoặc chuỗi byte (đối với tệp nhị phân) được thực hiện bằng phương thức write (). Phương thức này trả về số ký tự được ghi vào tệp.

with open('Failed.py','w',encoding = 'utf-8') as f:
   f.write("Write what you want to write in\n")
   f.write("this file\n\n")

Chương trình này sẽ tạo một tệp mới có tên Failed.pytrong thư mục hiện tại nếu nó không tồn tại. Nếu nó tồn tại, nó sẽ bị ghi đè.

Chúng ta phải tự bao gồm các ký tự dòng mới để phân biệt các dòng khác nhau.


@Stefan Nếu giải quyết được vấn đề của bạn, vui lòng đánh dấu nó là được chấp nhận.
MRUNAL KHÔNG PHẢI LÀ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.