DiskReaderWriter.py 1.55 KB
Newer Older
liukaiwen's avatar
liukaiwen committed
1
2
import os
from magic_pdf.io.AbsReaderWriter import AbsReaderWriter
liukaiwen's avatar
liukaiwen committed
3
from loguru import logger
liukaiwen's avatar
liukaiwen committed
4
5
6
7
8
9
10
class DiskReaderWriter(AbsReaderWriter):
    def __init__(self, parent_path, encoding='utf-8'):
        self.path = parent_path
        self.encoding = encoding

    def read(self, mode="text"):
        if not os.path.exists(self.path):
liukaiwen's avatar
liukaiwen committed
11
12
            logger.error(f"文件 {self.path} 不存在")
            raise Exception(f"文件 {self.path} 不存在")
liukaiwen's avatar
liukaiwen committed
13
14
15
16
17
18
19
20
21
22
23
24
25
        if mode == "text":
            with open(self.path, 'r', encoding = self.encoding) as f:
                return f.read()
        elif mode == "binary":
            with open(self.path, 'rb') as f:
                return f.read()
        else:
            raise ValueError("Invalid mode. Use 'text' or 'binary'.")

    def write(self, data, mode="text"):
        if mode == "text":
            with open(self.path, 'w', encoding=self.encoding) as f:
                f.write(data)
liukaiwen's avatar
liukaiwen committed
26
27
                logger.info(f"内容已成功写入 {self.path}")

liukaiwen's avatar
liukaiwen committed
28
29
30
        elif mode == "binary":
            with open(self.path, 'wb') as f:
                f.write(data)
liukaiwen's avatar
liukaiwen committed
31
                logger.info(f"内容已成功写入 {self.path}")
liukaiwen's avatar
liukaiwen committed
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
        else:
            raise ValueError("Invalid mode. Use 'text' or 'binary'.")


# 使用示例
if __name__ == "__main__":
    file_path = "example.txt"
    drw = DiskReaderWriter(file_path)

    # 写入内容到文件
    drw.write(b"Hello, World!", mode="binary")

    # 从文件读取内容
    content = drw.read()
    if content:
liukaiwen's avatar
liukaiwen committed
47
        logger.info(f"从 {file_path} 读取的内容: {content}")
liukaiwen's avatar
liukaiwen committed
48
49