Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Kể từ Python 3.3, bạn có thể sử dụng lớp

from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
1 từ mô -đun
from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
2 để an toàn một số lượng tệp tùy ý.
open an arbitrary number of files.

Nó có thể quản lý một số lượng động của các đối tượng nhận biết bối cảnh, điều đó có nghĩa là nó sẽ chứng minh đặc biệt hữu ích nếu bạn không biết bạn sẽ xử lý bao nhiêu tệp.

Trên thực tế, trường hợp sử dụng chính tắc được đề cập trong tài liệu là quản lý một số lượng tệp động.

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    # All opened files will automatically be closed at the end of
    # the with statement, even if attempts to open files later
    # in the list raise an exception

Nếu bạn quan tâm đến các chi tiết, đây là một ví dụ chung để giải thích cách

from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
1 hoạt động:

from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)

Output:

0
enter X1
enter X2
enter X3
3
exit X3
exit X2
exit X1
0
[1, 2, 3]

Câu trả lời được đề xuất

Bạn có thể đăng một số mã của bạn? Tôi bối rối về lý do tại sao bạn cần phải mở rất nhiều tệp cùng một lúc ... bạn có thể đạp xe từng cái một và không mở tất cả chúng không?

Nhảy để đăng

Số lượng tệp mở tối đa mà một quy trình được phép có từ hệ điều hành.

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện

Nhảy để đăng

Số lượng tệp mở tối đa mà một quy trình được phép có từ hệ điều hành.
If you are needing to open 100+ files at once, you should perhaps re factor your code and design.

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Nhảy để đăng

Số lượng tệp mở tối đa mà một quy trình được phép có từ hệ điều hành.

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Bạn có thể đăng một số mã của bạn? Tôi bối rối về lý do tại sao bạn cần phải mở rất nhiều tệp cùng một lúc ... bạn có thể đạp xe từng cái một và không mở tất cả chúng không?

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Nhảy để đăng 5,138 Posting Sage

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Số lượng tệp mở tối đa mà một quy trình được phép có từ hệ điều hành.

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện

Câu hỏi của tôi: Chúng ta có thực sự cần điều này không? Tại sao? Nếu bạn cần mở hơn 100 tệp cùng một lúc, có lẽ bạn nên làm lại mã và thiết kế của mình.

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

BTW, nếu bạn đang sử dụng *inx (UNIX, Linux), bạn có thể chạy lệnh sau để biết số lượng tối đa của 1,429 Practically a Posting Shark

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Số lượng tệp mở tối đa mà một quy trình được phép có từ hệ điều hành.
If you are needing to open 100+ files at once, you should perhaps re factor your code and design.

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".
Note that $ is my shell prompt.

$ cat /proc/sys/fs/file-max
95141

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện
To change this use: where 104854 is max number which you want.

$ echo "104854" > /proc/sys/fs/file-max

Câu hỏi của tôi: Chúng ta có thực sự cần điều này không? Tại sao? Nếu bạn cần mở hơn 100 tệp cùng một lúc, có lẽ bạn nên làm lại mã và thiết kế của mình.

$ cat /proc/sys/fs/file-nr
5024	0	95141

BTW, nếu bạn đang sử dụng *inx (UNIX, Linux), bạn có thể chạy lệnh sau để biết số lượng tối đa của

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Tất cả 12 câu trả lời 320 Veteran Poster

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện

Câu hỏi của tôi: Chúng ta có thực sự cần điều này không? Tại sao? Nếu bạn cần mở hơn 100 tệp cùng một lúc, có lẽ bạn nên làm lại mã và thiết kế của mình.

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện

Câu hỏi của tôi: Chúng ta có thực sự cần điều này không? Tại sao? Nếu bạn cần mở hơn 100 tệp cùng một lúc, có lẽ bạn nên làm lại mã và thiết kế của mình.

Name_List = ['AluSp', 'AluGp', 'AluSx' ... 'ZZcta' ]

BTW, nếu bạn đang sử dụng *inx (UNIX, Linux), bạn có thể chạy lệnh sau để biết số lượng tối đa của

AluSp.bed, AluGp.bed, AluSx.bed...ZZcta.bed

Tất cả 12 câu trả lời

13 năm trước

Salem5.138 Sage đăng bài

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện từ phía bạn.

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Chỉ cần xem xét nó trong các thiết kế trong tương lai của bạn rằng bạn không có số lượng tệp mở không giới hạn để chơi. 969 Nearly a Posting Maven

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện
...

Câu hỏi của tôi: Chúng ta có thực sự cần điều này không? Tại sao? Nếu bạn cần mở hơn 100 tệp cùng một lúc, có lẽ bạn nên làm lại mã và thiết kế của mình.

for line in file(filename):
    # do something with line

BTW, nếu bạn đang sử dụng *inx (UNIX, Linux), bạn có thể chạy lệnh sau để biết số lượng tối đa của

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Thường có thể thay đổi điều này (nhưng chi tiết khác nhau), nhưng làm như vậy gần như chắc chắn đòi hỏi các đặc quyền "quản trị viên/root".

Đó cũng là một cái gì đó không nên được thực hiện nhẹ để tiết kiệm một chút bất tiện

Câu hỏi của tôi: Chúng ta có thực sự cần điều này không? Tại sao? Nếu bạn cần mở hơn 100 tệp cùng một lúc, có lẽ bạn nên làm lại mã và thiết kế của mình.

Name_List = ['AluSp', 'AluGp', 'AluSx' ... 'ZZcta' ]

Đối với mỗi tên trong danh sách tên, tôi muốn lưu trữ một tệp cùng tên, ví dụ:

AluSp.bed, AluGp.bed, AluSx.bed...ZZcta.bed

Chương trình sẽ hủy bỏ tệp dữ liệu và đối với mỗi tên, dòng đó được ghi vào tệp thích hợp.

Vì tệp dữ liệu thô quá lớn, tôi không thể mở một tệp cho một tên trong danh sách, quét toàn bộ tệp dữ liệu, chỉ nối các mục cho tên đầu tiên (alusp.bed) và sau đó đóng. Làm như vậy sẽ yêu cầu 110 lần quét tệp 50 triệu dòng. Những gì tôi đang làm là quét tệp dữ liệu thô một lần, trong khi tất cả các tệp tên 110 vẫn mở và đối với mỗi dòng trong tệp dữ liệu, dòng đó được ghi vào tệp tên thích hợp.

Đa ro chưa?

Mã này được đặt đúng chỗ, vì vậy nếu bạn muốn xem nó, tôi có thể đăng nó.

Mặc dù vậy, không cần phải giữ tất cả các tệp cùng một lúc. Thay vì có một danh sách 100 tay cầm tệp thay thế nó bằng một danh sách các tên tệp, thì mỗi lần bạn muốn viết cho một trong số chúng chỉ cần mở tệp, hãy ghi vào nó, sau đó đóng nó.

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

13 năm trước

Mặc dù vậy, không cần phải giữ tất cả các tệp cùng một lúc. Thay vì có một danh sách 100 tay cầm tệp thay thế nó bằng một danh sách các tên tệp, thì mỗi lần bạn muốn viết cho một trong số chúng chỉ cần mở tệp, hãy ghi vào nó, sau đó đóng nó.

13 năm trước

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

13 năm trước

13 năm trước

Không phải là quá trình mở và đóng tệp khiến nó bị ghi đè, thay vì dòng được thêm vào?

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

13 năm trước

Không phải là quá trình mở và đóng tệp khiến nó bị ghi đè, thay vì dòng được thêm vào?
Anyways, if you open a file with

from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
4 then when you call
from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
5 on it, it'll just append it. Like The_Kernel said, just make sure you keep track of whether the file has been created yet, and if not, open it with the mode parameter as "w".

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

13 năm trước

Không phải là quá trình mở và đóng tệp khiến nó bị ghi đè, thay vì dòng được thêm vào?

Thanks.

Hướng dẫn how many files can be open at once in python? - có thể mở bao nhiêu tệp cùng một lúc trong python?

Không nếu bạn mở nó ở chế độ phụ lục. Điều đó có nghĩa là bất cứ điều gì trước đây trong tệp sẽ ở đó và điều này có thể không mong muốn trong lần ghi đầu tiên (vì bạn muốn tệp chỉ chứa dữ liệu từ lần chạy hiện tại có lẽ). Để khắc phục điều này, chỉ cần theo dõi xem bạn đã viết vào tệp trước đó; Nếu bạn đã mở nó ở chế độ Phụ lục, nếu không hãy mở nó ở chế độ ghi. 320 Veteran Poster

13 năm trước

Không phải là quá trình mở và đóng tệp khiến nó bị ghi đè, thay vì dòng được thêm vào?

Không nếu bạn mở nó ở chế độ phụ lục. Điều đó có nghĩa là bất cứ điều gì trước đây trong tệp sẽ ở đó và điều này có thể không mong muốn trong lần ghi đầu tiên (vì bạn muốn tệp chỉ chứa dữ liệu từ lần chạy hiện tại có lẽ). Để khắc phục điều này, chỉ cần theo dõi xem bạn đã viết vào tệp trước đó; Nếu bạn đã mở nó ở chế độ Phụ lục, nếu không hãy mở nó ở chế độ ghi.

Bây giờ tôi tò mò mất bao lâu để máy tính của bạn phân tích "tệp dòng 50 triệu" này với Python, xem Python chậm như thế nào so với những thứ như C ... trừ khi tất nhiên bạn đang phóng đại số lượng dòng. Dù sao, nếu bạn mở một tệp với

from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
4 thì khi bạn gọi
from contextlib import ExitStack

class X:
    num = 1

    def __init__(self):
        self.num = X.num
        X.num += 1

    def __repr__(self):
        cls = type(self)
        return '{cls.__name__}{self.num}'.format(cls=cls, self=self)

    def __enter__(self):
        print('enter {!r}'.format(self))
        return self.num

    def __exit__(self, exc_type, exc_value, traceback):
        print('exit {!r}'.format(self))
        return True

xs = [X() for _ in range(3)]

with ExitStack() as stack:
    print(len(stack._exit_callbacks)) # number of callbacks called on exit
    nums = [stack.enter_context(x) for x in xs]
    print(len(stack._exit_callbacks))

print(len(stack._exit_callbacks))
print(nums)
5 trên đó, nó sẽ chỉ nối nó. Giống như_kernel đã nói, chỉ cần đảm bảo bạn theo dõi xem tệp có được tạo hay không, và nếu không, hãy mở nó bằng tham số chế độ là "W".

Áp phích kỳ cựu JLM699320

Python có thể mở nhiều tệp cùng một lúc không?

Python cung cấp khả năng mở cũng như làm việc với nhiều tệp cùng một lúc.Các tệp khác nhau có thể được mở ở các chế độ khác nhau, để mô phỏng việc viết đồng thời hoặc đọc từ các tệp này.. Different files can be opened in different modes, to simulate simultaneous writing or reading from these files.

Có bao nhiêu cách một tập tin python có thể được mở?

R: Chế độ chỉ đọc ..
R+: Chế độ đọc và ghi.....
RB: Chế độ nhị phân chỉ đọc để đọc hình ảnh, video, v.v.
W: Chế độ chỉ viết.....
W+: Chế độ đọc và viết ..
WB: Chế độ chỉ ghi nhị phân để ghi vào các tệp phương tiện ..
WB+: Chế độ đọc và ghi nhị phân ..
A: Chế độ nối ..

Bạn có thể sử dụng với Mở trên nhiều tệp không?

Một thiếu sót khi mở với tùy chọn là nó biến mất nếu bạn chọn nhiều tệp.it disappears if you select multiple files.