Главная > Программирование > Python: файловый интерпретатор.

Python: файловый интерпретатор.

Очередной бестолковый велосипед от СГУ. Требуется написать "интерпретатор", который умел бы работать с файлами. Так же умел бы исполнять сторонние скрипты. Работа с файлами заключается в следующих функциях - открыть на запись, открыть на чтение, закрыть файл, читать из файла, читать n байт, записать в файл, читать в буфер, записать из буфера в файл, сместиться на определённую позицию.

По сути получается некая прослойка между консолью и функциями самого языка программирования. В C++ пришлось наверное по мучиться над этим (хотя ничего сложного, главное - знания), в python'е всё как всегда ;-).

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys

class MyFile:
def __init__(self):
self.name = None
self.desc = None
self.flags = None
self.buffer = ""

def open(self, fname, flags):
print "Opening %s in mode %s." % (fname, flags)
self.name = fname
self.flags = flags
self.desc = open(self.name, flags)

def write(self, data):
print "Writing data in file."
self.desc.write(data)

def writeFromBuffer(self, bytes=None):
if bytes is None:
bytes = len(self.buffer)
print "Writing data in file from buffer."
self.desc.write(self.buffer[:bytes])
print "Wrote %d bytes." % len(self.buffer[:bytes])
self.buffer = self.buffer[bytes:])

def read(self, bytes=None):
print "Reading from file."
if bytes is None:
r = self.desc.read()
else:
r = self.desc.read(bytes)
lr = len(r)
print "Read %d bytes from file: \"%s\"." % (lr, r)
return r

def writeToBuffer(self, bytes=None):
print "Reading from file to buffer."
if bytes is None:
r = self.desc.read()
else:
r = self.desc.read(bytes)
lr = len(r)
self.buffer += r
print "Read %d bytes from file: \"%s\"." % (lr, r)
return r

def clearBuffer(self):
self.buffer = ""

def close(self):
print "Closing file."
self.desc.close()

def seek(self, position):
position = int(position)
print "Seting seek in file to position %d" % position
self.desc.seek(position)

def process(f):
f = open(f, "rb")
mf = MyFile()
for line in f:
eval("mf." + line)
f.close()

if __name__ == "__main__":
args = sys.argv[1:]
if len(args) > 0:
for arg in args:
try:
process(arg)
print "!!! %s processed successfully. !!!" % arg
except:
print "!!! Error while processing script %s. !!!" % arg
else:
action = ""
print "q - quit"
print "open(fname) - open file"
print "write(data) - write data in file"
print "read([bytes]) - read data from file"
print "seek(position) - set seek in file to position"
print "close() - close file"
f = MyFile()
while True:
try:
eval("f." + raw_input("> "))
except:
print "Error."
else:
print "Ok."

Если мы хотим работать в интерактивном режиме - то просто выполняем скрипт, если хотим обработать скрипты - передаём их имена в параметрах программы. Например:

$./main.py 1.scr 2.scr 3.scr

На сегодня, пожалуй, хватит с меня постов, подожду пока эти оценят.

Пожалуйста, оцените полезность и качество данной статьи. Одна звезда - плохо, 5 - хорошо.
1/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.2/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.3/5. Мы будем признательны, если вы напишете комментарий с причиной низкой оценки.4/5.5/5. (3 голосов, средний: 5,00 из 5)
Загрузка...
  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.