كيف يمكنني الحصول على عدد البايت من متغير في بيثون تماما مثل WC -C يعطي في UNIX
سؤال
أنا مواجهة بعض المشاكل مع الملفات مع بيانات ضخمة. أحتاج إلى تخطي القيام ببعض التنفيذ على تلك الملفات. أحصل على بيانات الملف في متغير. الآن أحتاج إلى الحصول على بايت المتغير وإذا كان أكبر من 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 مرة واحدة.