file.truncate () не работает, даже если путь существует в python - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь сделать манипуляцию с файлом. Что я хочу сделать, это удалить часть байта из файла и переместить остальную часть файла на столько байтов в место удаленной части. У меня есть этот код:

f = open("file.txt", "r+b")
mm = mmap.mmap(f.fileno(), 0)
s=""
for i in range(10 - len(arg_list[0])) :
    s+="\0"
s+=arg_list[0]
index = 0

while mm[:10]:
    current_type_name = mm[:10].decode()
    if current_type_name == s:
        f.seek(110*index)
        f.truncate()
        f.write(mm[110*(index+1):])
    else:    
        mm = mm[110:]
        index += 1

Все работает правильно, кроме функции f.truncate (). Я уже пробовал f.truncate (n), где n - целое число, но я все еще получаю ошибку ниже.

Ошибка:

File "main.py", line 109, in delete_type
    f.truncate()
OSError: [Errno 22] Invalid argument

Я искал причины этого, некоторые говорят, что это связанный с filepath или файл не существует. Но я на 100% уверен, что запускаю файл через консоль по тому же пути, и файл уже существует. Также я пробовал абсолютный путь как с \, так и с r "" способами. Но все же я получил ту же ошибку.

Еще одна вещь, когда я попытался прокомментировать функцию f.truncate () и переставить l oop, чтобы она не падала бесконечно l oop, код работает. Кроме того, я использую структуры кода в других функциях, что удивительно: ошибка не возникает.

...