мне нужно скомпилировать двоичный файл на куски с кусочками, прибывающим в случайном порядке (да, его P2P проект)Запись двоичных данных в середине разреженный файл
def write(filename, offset, data)
file.open(filename, "ab")
file.seek(offset)
file.write(data)
file.close()
Скажем, у меня есть 32KB запись (е , o, d) при смещении 1 МБ в файл, а затем еще 32 КБ записи (f, o, d) со смещением 0
В итоге я получаю файл длиной 65 КБ (т. е. промежуток, состоящий из 0 с между 32 КБ - 1 МБ, усекается/исчезает)
Я знаю, что это может показаться невероятно глупым вопросом, но я не могу его изобразить из режимов file.open (..)
Совет с благодарностью получил.
*** UPDATE
Мой метод писать P2P части кончался следующим образом (для тех, кто может почерпнуть какую-то ценность от него)
def writePiece(self, filename, pieceindex, bytes, ipsrc, ipdst, ts):
file = open(filename,"r+b")
if not self.piecemap[ipdst].has_key(pieceindex):
little = struct.pack('<'+'B'*len(bytes), *bytes)
# Seek to offset based on piece index
file.seek(pieceindex * self.piecesize)
file.write(little)
file.flush()
self.procLog.info("Wrote (%d) bytes of piece (%d) to %s" % (len(bytes), pieceindex, filename))
# Remember we have this piece now in case duplicates arrive
self.piecemap[ipdst][pieceindex] = True
file.close()
Примечание: Я также рассмотрел некоторые вопросы порядком байт, используя-структуру .pack, который мучил меня некоторое время.
Для кого-то интересно, проект, над которым я работаю, - это анализировать сообщения BT, записанные непосредственно с провода.
Вы не 'искали' до конца и писать там до закрытия? –
Этот код не запускается. Каков фактический код, который вы используете? –
Мне нужен сон - это такой любопытный вопрос, который я не могу поверить, я спросил его. Извиняюсь. Мне нужно было использовать: file.open («r + b») для достижения моей намеченной цели. – codeasone