Как я могу получить количество байтов переменной в Python так же, как wc -c дает в Unix - PullRequest
1 голос
/ 07 января 2010

Я столкнулся с некоторой проблемой с файлами с огромными данными. Мне нужно пропустить выполнение некоторых файлов. я получаю данные файла в переменную. Теперь мне нужно получить байт переменной и, если она больше 102400, напечатать сообщение.

обновление: я не могу открыть файлы, так как они присутствуют в файле tar. содержимое уже копируется в переменную с именем «data» Я могу распечатать содержимое переменных данных. мне просто нужно проверить, имеет ли он больше 102400 байт.

спасибо

Ответы [ 5 ]

6 голосов
/ 07 января 2010
import os
length_in_bytes = os.stat('file.txt').st_size
if length_in_bytes > 102400:
   print 'Its a big file!'

Обновление для работы с файлами в tarfile

import tarfile
tf = tarfile.TarFile('foo.tar')
for member in tarfile.getmembers():
    if member.size > 102400:
        print 'It's a big file in a tarfile - the file is called %s!' % member.name
2 голосов
/ 07 января 2010

Просто проверьте длину строки, затем:

if len(data) > 102400:
  print "Skipping file which is too large, at %d bytes" % len(data)
else:
  process(data) # The normal processing
2 голосов
/ 07 января 2010

Если я правильно понял вопрос, вы хотите пропустить некоторые входные файлы, если они слишком велики. Для этого вы можете использовать os.path.getsize():

import os.path
if os.path.getsize('f') <= 102400:
  doit();
1 голос
/ 07 января 2010

len(data) дает вам размер в байтах, если это двоичные данные. Размер строк зависит от используемой кодировки.

0 голосов
/ 07 января 2010

Этот ответ кажется неуместным, поскольку я, кажется, неправильно понял вопрос, который теперь прояснился. Тем не менее, если кто-то найдет этот вопрос при поиске с почти такими же терминами, этот ответ все еще может быть актуальным:

Просто откройте файл в двоичном режиме

f = open (имя файла, 'rb')

чтение / пропуск группы и печать следующего байта (ов). Я использовал тот же метод, чтобы «исправить» n-й байт в миллионе изображений один раз.

...