كيف يمكنني الحصول على عدد البايت من متغير في بيثون تماما مثل WC -C يعطي في UNIX

StackOverflow https://stackoverflow.com/questions/2020318

  •  19-09-2019
  •  | 
  •  

سؤال

أنا مواجهة بعض المشاكل مع الملفات مع بيانات ضخمة. أحتاج إلى تخطي القيام ببعض التنفيذ على تلك الملفات. أحصل على بيانات الملف في متغير. الآن أحتاج إلى الحصول على بايت المتغير وإذا كان أكبر من 102400، ثم طباعة رسالة.

تحديث: لا يمكنني فتح الملفات، لأنه موجود في ملف القطران. يتم بالفعل نسخ المحتوى بالفعل إلى متغير يسمى "البيانات" التي يمكنني طباعة محتويات البيانات المتغيرة. أنا فقط بحاجة إلى التحقق مما إذا كان لديه أكثر من 102400 بايت.

شكرًا

هل كانت مفيدة؟

المحلول

فقط تحقق من طول السلسلة، ثم:

if len(data) > 102400:
  print "Skipping file which is too large, at %d bytes" % len(data)
else:
  process(data) # The normal processing

نصائح أخرى

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

إذا كنت أفهم السؤال بشكل صحيح، فأنت تريد تخطي بعض ملفات الإدخال إذا كانت كبيرة جدا. لذلك، يمكنك استخدام os.path.getsize():

import os.path
if os.path.getsize('f') <= 102400:
  doit();

len(data) يمنحك الحجم في البايتات إذا كانت البيانات الثنائية. مع سلاسل الحجم يعتمد على الترميز المستخدم.

يبدو أن هذه الجواب غير ذي صلة، حيث يبدو أنني أسيء فهم السؤال، الذي تم توضيحه الآن. ومع ذلك، إذا وجد شخص ما هذا السؤال، أثناء البحث عن نفس الشروط نفسها، قد لا يزال هذه الإجابة ذات صلة:

فقط افتح الملف في الوضع الثنائي

F = Open (اسم الملف، "RB")

قراءة / تخطي حفنة وطباعة البايت (S) التالي. لقد استخدمت نفس الطريقة "لإصلاح" البايت N في صور Zillion مرة واحدة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top