Tôi hiện đang làm việc trên một ứng dụng yêu cầu đọc tất cả các đầu vào từ một tệp cho đến khi gặp một ký tự nhất định.
Bằng cách sử dụng mã:
file=open["Questions.txt",'r']
c=file.readlines[]
c=[x.strip[] for x in c]
Mỗi khi dải gặp
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
0, nó được xóa khỏi đầu vào và được coi là một chuỗi trong danh sách 1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
1.Điều này có nghĩa là mọi dòng được chia thành một phần của danh sách
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
1. Nhưng tôi muốn lập một danh sách lên đến một điểm bất cứ khi nào một nhân vật đặc biệt gặp phải như thế này:I want to make a list up to a point whenever a special character is encountered like this:Nếu tệp đầu vào có nội dung:
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
Sau đó, tôi muốn nhận một danh sách là
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
3Xin hãy giúp tôi làm điều này.
Yannis
1.5927 Huy hiệu vàng25 Huy hiệu bạc45 Huy hiệu Đồng7 gold badges25 silver badges45 bronze badges
Hỏi ngày 21 tháng 12 năm 2017 lúc 14:29Dec 21, 2017 at 14:29
1
Cách dễ nhất sẽ là đọc tệp trong một chuỗi duy nhất và sau đó chia nó qua dấu phân cách của bạn:
with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
Trong trường hợp, tệp của bạn rất lớn, việc giữ các nội dung hoàn chỉnh trong bộ nhớ dưới dạng một chuỗi để sử dụng
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
4 có thể không mong muốn [và sau đó giữ các nội dung hoàn chỉnh trong danh sách sau khi phân chia có lẽ cũng không mong muốn]. Sau đó, bạn có thể đọc nó trong các khối:def each_chunk[stream, separator]:
buffer = ''
while True: # until EOF
chunk = stream.read[CHUNK_SIZE] # I propose 4096 or so
if not chunk: # EOF?
yield buffer
break
buffer += chunk
while True: # until no separator is found
try:
part, buffer = buffer.split[separator, 1]
except ValueError:
break
else:
yield part
with open['myFileName'] as myFile:
for chunk in each_chunk[myFile, separator='\\-1\n']:
print[chunk] # not holding in memory, but printing chunk by chunk
Đã trả lời ngày 21 tháng 12 năm 2017 lúc 14:47Dec 21, 2017 at 14:47
AlfealfeAlfe
53,8K19 Huy hiệu vàng100 Huy hiệu bạc153 Huy hiệu đồng19 gold badges100 silver badges153 bronze badges
1
Tôi đã sử dụng "*" thay vì "-1", tôi sẽ cho phép bạn thực hiện các thay đổi thích hợp.
s = '1.Hai\n2.Bye*3.Hello\n4.OAPd*'
temp = ''
results = []
for char in s:
if char is '*':
results.append[temp]
temp = []
else:
temp += char
if len[temp] > 0:
results.append[temp]
Đã trả lời ngày 21 tháng 12 năm 2017 lúc 14:45Dec 21, 2017 at 14:45
1
Đọc một tệp cho đến khi một ký tự cụ thể trong Python #
Để đọc một tệp cho đến khi một ký tự cụ thể:
- Mở tệp ở chế độ đọc.
- Sử dụng phương thức
5 để đọc nội dung của tệp vào một chuỗi.1.Hai 2.Bye\-1 3.Hello 4.OAPd\-1
- Sử dụng phương thức
6 để phân chia tệp trên ký tự đã cho.1.Hai 2.Bye\-1 3.Hello 4.OAPd\-1
- Truy cập danh sách tại Index
7.1.Hai 2.Bye\-1 3.Hello 4.OAPd\-1
Copied!
with open['example.txt', 'r', encoding='utf-8'] as file: contents = file.read[] character = '!' result = contents.split[character] print[result] # 👉️ ['bobby\nhadz\n.com\n', '\none\ntwo\nthree'] # bobby # hadz # .com print[result[0]]
Nếu bạn đang làm việc với các tệp rất lớn, hãy cuộn xuống tiêu đề tiếp theo.
Mẫu mã giả định rằng bạn có một tệp
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
8 nằm trong cùng một thư mục.Copied!
bobby hadz .com ! one two three
Chúng tôi đã sử dụng câu lệnh
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
9 để mở tệp ở chế độ đọc.Câu lệnh tự động chăm sóc đóng tệp cho chúng tôi.
Phương thức
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
5 được sử dụng để đọc nội dung của toàn bộ tệp thành một chuỗi.Nếu bạn làm việc với các tệp rất lớn mà bạn không muốn tải trong bộ nhớ, hãy cuộn xuống tiêu đề tiếp theo.
Khi chúng tôi có nội dung của tệp được lưu trữ trong một chuỗi, chúng tôi sử dụng phương thức
6 để phân chia chuỗi trên ký tự đã cho.1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
Phương thức str.split [] chia chuỗi thành một danh sách các chuỗi con bằng cách sử dụng dấu phân cách.
Phương thức lấy 2 tham số sau:
máy tách biệt | Chia chuỗi thành chuỗi con trên mỗi lần xuất hiện |
MaxSplit | Nhiều nhất 2 chia tách được thực hiện [tùy chọn] |
Nếu bạn chỉ cần một phần của tệp trước ký tự, hãy đặt đối số
with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
3 thành with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
4 để chỉ chia chuỗi một lần.Copied!
with open['example.txt', 'r', encoding='utf-8'] as file: contents = file.read[] character = '!' result = contents.split[character, 1] print[result] # 👉️ ['bobby\nhadz\n.com\n', '\none\ntwo\nthree'] # bobby # hadz # .com print[result[0]]
Điều này sẽ hiệu suất hơn một chút nếu ký tự được chứa nhiều lần trong tệp vì chuỗi chỉ được chia trong lần xuất hiện đầu tiên của ký tự đã cho.
Ngoài ra, bạn có thể sử dụng vòng lặp
with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
5.Đọc một tệp cho đến khi một ký tự cụ thể bằng cách sử dụng vòng lặp trong một thời gian
Để đọc một tệp cho đến khi một ký tự cụ thể:
- Mở tệp ở chế độ đọc.
- Sử dụng phương thức
6 để đọc ký tự tệp theo ký tự trong vòng lặpwith open['myFileName'] as myFile: text = myFile.read[] result = text.split[separator] # use your \-1 [whatever that means] here
5.with open['myFileName'] as myFile: text = myFile.read[] result = text.split[separator] # use your \-1 [whatever that means] here
- Khi nhân vật dừng được tìm thấy, thoát khỏi vòng lặp.
________số 8
Mẫu mã giả định rằng bạn có một tệp
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
8 nằm trong cùng một thư mục.Copied!
bobby hadz .com ! one two three
Chúng tôi đã sử dụng vòng lặp
with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
9 để lặp lại cho đến khi chúng tôi đến cuối tệp.Phương thức
5 lấy đối số 1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
1 đại diện cho số lượng ký tự để đọc từ tệp.def each_chunk[stream, separator]:
buffer = ''
while True: # until EOF
chunk = stream.read[CHUNK_SIZE] # I propose 4096 or so
if not chunk: # EOF?
yield buffer
break
buffer += chunk
while True: # until no separator is found
try:
part, buffer = buffer.split[separator, 1]
except ValueError:
break
else:
yield part
with open['myFileName'] as myFile:
for chunk in each_chunk[myFile, separator='\\-1\n']:
print[chunk] # not holding in memory, but printing chunk by chunk
Nếu bạn đang đọc một tệp ở chế độ nhị phân, thì
def each_chunk[stream, separator]:
buffer = ''
while True: # until EOF
chunk = stream.read[CHUNK_SIZE] # I propose 4096 or so
if not chunk: # EOF?
yield buffer
break
buffer += chunk
while True: # until no separator is found
try:
part, buffer = buffer.split[separator, 1]
except ValueError:
break
else:
yield part
with open['myFileName'] as myFile:
for chunk in each_chunk[myFile, separator='\\-1\n']:
print[chunk] # not holding in memory, but printing chunk by chunk
1 thể hiện kích thước của byte được đọc từ tệp.Chúng tôi đặt đối số
def each_chunk[stream, separator]:
buffer = ''
while True: # until EOF
chunk = stream.read[CHUNK_SIZE] # I propose 4096 or so
if not chunk: # EOF?
yield buffer
break
buffer += chunk
while True: # until no separator is found
try:
part, buffer = buffer.split[separator, 1]
except ValueError:
break
else:
yield part
with open['myFileName'] as myFile:
for chunk in each_chunk[myFile, separator='\\-1\n']:
print[chunk] # not holding in memory, but printing chunk by chunk
1 thành with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
4 để đọc ký tự tệp theo ký tự.Nếu kết thúc của tệp đã đạt được, phương thức
1.Hai
2.Bye\-1
3.Hello
4.OAPd\-1
5 sẽ trả về một chuỗi trống.Trên mỗi lần lặp, chúng tôi kiểm tra xem ký tự hiện tại có bằng ký tự dừng không.
Nếu điều kiện được đáp ứng, chúng tôi thoát khỏi vòng lặp, nếu không, chúng tôi sẽ thêm ký tự vào chuỗi
def each_chunk[stream, separator]:
buffer = ''
while True: # until EOF
chunk = stream.read[CHUNK_SIZE] # I propose 4096 or so
if not chunk: # EOF?
yield buffer
break
buffer += chunk
while True: # until no separator is found
try:
part, buffer = buffer.split[separator, 1]
except ValueError:
break
else:
yield part
with open['myFileName'] as myFile:
for chunk in each_chunk[myFile, separator='\\-1\n']:
print[chunk] # not holding in memory, but printing chunk by chunk
6.Tuyên bố phá vỡ thoát ra khỏi vòng lặp
def each_chunk[stream, separator]:
buffer = ''
while True: # until EOF
chunk = stream.read[CHUNK_SIZE] # I propose 4096 or so
if not chunk: # EOF?
yield buffer
break
buffer += chunk
while True: # until no separator is found
try:
part, buffer = buffer.split[separator, 1]
except ValueError:
break
else:
yield part
with open['myFileName'] as myFile:
for chunk in each_chunk[myFile, separator='\\-1\n']:
print[chunk] # not holding in memory, but printing chunk by chunk
7 hoặc with open['myFileName'] as myFile:
text = myFile.read[]
result = text.split[separator] # use your \-1 [whatever that means] here
5.