跳转至

文件操作工具

文件操作工具提供各种文件内容操作功能,包括读取、写入、搜索和替换。

类概览

文件操作工具主要包括以下类:

  • FileOps - 提供核心文件操作功能,专为 LLM 代理集成设计

使用方法

基本使用

from toolregistry_hub import FileOps

# Read file
content = FileOps.read_file("path/to/file.txt")
print(content)

# Write file
FileOps.write_file("path/to/new_file.txt", "Hello, World!")

# Append content to file
FileOps.append_file("path/to/file.txt", "\nNew line appended.")

# Search files
results = FileOps.search_files("src", "class.*Search", "*.py")
for result in results:
    print(f"File: {result['file']}")
    print(f"Line number: {result['line_num']}")
    print(f"Line: {result['line']}")
    print(f"Context: {result['context']}")

详细 API

FileOps 类

FileOps 是一个提供核心文件操作功能的类,专为 LLM 代理集成设计。

方法

  • edit(path: str, old_string: str, new_string: str, replace_all: bool = False, start_line: int | None = None) -> str: 精确字符串替换。返回 unified diff 格式的变更内容。支持 replace_all 批量替换和 start_line 多匹配消歧。
  • search_files(path: str, regex: str, file_pattern: str = "*") -> List[dict]: 在文件中搜索匹配正则表达式的内容,返回包含 file, line_num, line, context 键的字典列表
  • read_file(path: str) -> str: 读取文件内容
  • write_file(path: str, content: str) -> None: 写入内容到文件
  • append_file(path: str, content: str) -> None: 追加内容到文件
  • make_diff(ours: str, theirs: str) -> str: 创建两个字符串之间的差异
  • make_git_conflict(ours: str, theirs: str) -> str: 创建 Git 风格的冲突标记

示例

读写文件

from toolregistry_hub import FileOps

# Read file
content = FileOps.read_file("example.txt")
print(f"Original content:\n{content}")
# 输出: Original content:
# Hello, World!

# Write file
FileOps.write_file("new_file.txt", "This is the content of a new file.")

# Append content to file
FileOps.append_file("example.txt", "\nThis is appended content.")

# Read file again to see changes
updated_content = FileOps.read_file("example.txt")
print(f"Updated content:\n{updated_content}")
# 输出: Updated content:
# Hello, World!
# This is appended content.

搜索文件

from toolregistry_hub import FileOps

# Search for class definitions in Python files
results = FileOps.search_files("src", r"class\s+\w+", "*.py")
print(f"Found {len(results)} matches:")
for result in results:
    print(f"File: {result['file']}")
    print(f"Line number: {result['line_num']}")
    print(f"Line: {result['line']}")
    print(f"Context: {result['context']}")
    print("-" * 50)
# 输出示例:
# Found 2 matches:
# File: /tmp/test1.py
# Line number: 1
# Line: class MyClass:
# Context: [(2, '    def __init__(self):'), (3, '        pass')]
# --------------------------------------------------

# Search for specific string
results = FileOps.search_files(".", "TODO", "*")
print(f"Found {len(results)} TODO items:")
for result in results:
    print(f"File: {result['file']}")
    print(f"Line number: {result['line_num']}")
    print(f"Line: {result['line']}")
    print("-" * 50)

编辑文件

from toolregistry_hub import FileOps

# 单次匹配替换
diff = FileOps.edit("example.py", "def hello():", "def hello_world():")
print(diff)  # 显示 unified diff 格式的变更

# 替换所有匹配
FileOps.edit("example.py", "TODO", "DONE", replace_all=True)

# 多匹配时使用 start_line 消歧,选择最接近第 42 行的匹配
FileOps.edit("example.py", "return result", "return modified", start_line=42)