py.user.next
не последовательно, а в том порядке, в котором найдёт
:) с вами согласен, недостаточно четко сформулировано. Кургинян наверное меня уже оштрафовал за это.
Не вижу разницы в вашем и моем утверждениях.
Правильное утверждение - последовательно в том порядке в котором файлы оказались в командной строке команды cat. А дальше это дело того кто их подсовывает. У меня получается так, что и windows и bash суют упорядоченно по алфавиту, не взирая на дату создания, но естественно, на это нельзя полагаться.
Я понимаю что это учебный пример, но:
1 при записи в файл в виде:
import numpy as np
d = np.zeros(3001,dtype='i')
d[:] = np.arange(3001)[:]
d.tofile('samp.dat')
системный cat отрабатывает нормально, а почти ваш (я его под 2.7 перетащил):
Traceback (most recent call last):
File “C:\PROJECTS\br1200\report\catt\ct.py”, line 9, in <module>
for i in cat('samp.dat'):
File “C:\PROJECTS\br1200\report\catt\ct.py”, line 6, in cat
for line in fin:
File “C:\comp\Python27\lib\codecs.py”, line 684, in next
return self.reader.next()
File “C:\comp\Python27\lib\codecs.py”, line 615, in next
line = self.readline()
File “C:\comp\Python27\lib\codecs.py”, line 530, in readline
data = self.read(readsize, firstline=True)
File “C:\comp\Python27\lib\codecs.py”, line 477, in read
newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: ‘utf8’ codec can't decode byte 0x80 in position 152: invalid start byte
Очевидно cat должен читать данные в двоичном режиме.
2
lines = cat('/etc/passwd', '/etc/fstab')
print(*lines, sep='', end='')
Нехорошо советовать новичкам затаскивать все в память. Особенно для cat.
Может лучше так?
for line in cat('/etc/passwd', '/etc/fstab'):
print(line)
А вообще хороший cat наверное будет сложнее - двоичное чтение, блоками согласованными по размеру с размерами блоков на диске …. Но стоит его изобретать? Он ведь есть.