Nhờ giúp đỡ lọc file trong python

Các pro giúp mình với, có hàm nào lọc được các đầu số ra được không
vd mình có 1 file gồm các số : 237660—>237669, mình muốn tách file này thành 2 file : Nếu 237660—>237665: tách thành một file , còn lại tách thành 1 file , Cảm ơn các pro

Bạn có thể đọc file cần tách rồi ghi ra 2 file riêng biệt.

3 Likes

pro có thể cho thử vd

Mình viết tạm mã giã

file = open("r")
file1 = open("w")
file2 = open("w")

while !file.eof(): // chưa hết file thì đọc
 number = file.readNumber()
 if(number >= 237660 && number <= 237665):
  file1.write(number)
 else
  file2.write(number)
3 Likes

Cảm ơn bạn nhiều, mình sẽ thử

scrip chay không được nhờ cao thủ giúp . thank
===================script ====================

from sys import argv
script, from_file, to_file1, to_file2 = argv

in_file = open(from_file)


while true:
	indata = in_file.readline()
	if indata (" " == indata):
		if("indata" >= 237660 && "indata" <= 237665):
			out_file1 = open(to_file1,'w')
			out_file1.write(indata)
		else:
			out_file2 = open(to_file2,'w')
			out_file2.write(indata)
print "all is done"

out_file2.close()
out_file1.close()
in_file.close()

@haucua b thay readline = readlines rồi dùng for để kiểm tra nhé

indata = in_file.readlines()
for data in indata:
    if data >= 237660 && data <= 237665:
        // do something
    else:
        // do something

Mình mới học lập trình còn rất gà mong bạn chỉ giúp , nếu được có thể cho mình xin chương trình hoàn chỉnh để tham khảo , cảm ơn bạn rất nhiều

file mình cần lọc :
237660676868
237667797979
237667888999
237667555888
237668808080
237665797979
237662797979
237666858585
237669999999
237666656789
237666666768

=============Script mình không lọc và ghi ra 2 file được ===============

from sys import argv
script, data, site1, site2 = argv

indata =  open(data).readlines()

for i in indata:
	if (indata >= '237660000000') and (indata <= '237665999999'):
		filesite1 = open(site1,'w').writelines(indata)
		print " write to site 1"
		
	else:
		filesite2 = open(site2,'w').writelines(indata)
		print " write to site 2"

print " =================filter finished====================="

Kết quả :
chỉ tạo được filesite2 và in toàn bộ dữ liệu của file input

Mình thấy bài này trễ quá không biết bây giờ bạn cần nữa không. Mình trả lời theo mình biết để các bạn khác bình luận góp ý, có thể có ích cho các bạn khác.

Đoạn code của bạn thiếu 1 bước file.closẹ() . module open là 1 dạng stream interface, nên cần phải kết thúc stream file của bạn mới được lưu lại. cái này cần lưu ý với mode = ‘w’ và ‘wb’.
‘w’ khi biến của bạn là string
‘wb’ khi biến của bạn là binary

ngoài ra, w và wb có nghĩa là ghi đè lên file, đại khái là xóa hết toàn bộ dữ liệu của file sau đó ghi cái mới vào. Trường hợp của bạn mình đề nghị thay w bằng a, mode này đại khái là thêm dữ liệu mới sau dữ liệu cũ.

Python có một cách viết khác cho các module

with opẹn(‘filename’, mode=‘w’, encode=‘utf-8’) as file.
file.write(‘Your text’)

with statement sẽ giúp bạn đóng file một cách sạch sẽ trường hợp bloc xử lý của bạn gặp lỗi hay các vấn đề khác.
về cái này bạn nên đọc PEP8 để hiểu rõ hơn.

Không biết có trể quá không nhưng bạn đang đang bị lỗi ở phần này:

  • Dữ liệu thu được sau khi đọc file theo kiểu Readlines sẽ là 1 list với các phần tử có kiểu là Str. Do vậy câu lệnh điều kiện của bạn sẽ không thực hiện được, bạn cần chuyển nó về dạng Int rồi mới so sánh và tách file
  • Nếu file của bạn quá lớn bạn nên dùng buffersize

Thank bạn mình post cái này lâu rồi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?