Как изменить размер ячейки, xllcorner и yllcorner файла ASCII? - PullRequest
0 голосов
/ 22 января 2020

Мне нужно преобразовать cellsize, xllcorner и yllcorner нескольких файлов ASCII из m в km. Я пытался перезаписать их в заголовке файлов ASCII, как если бы я использовал обычный текстовый файл, например:

for rw_file in os.listdir(r"C:\Users\Marie\Test"):
    rw_file_path = os.path.join(r"C:\Users\Marie\Test", rw_file)
    with open(rw_file_path, 'r+') as f:
        # skip the first two lines of the header
        f.readline()
        f.readline()
        # convert the values of cellsize, xllcorner and yllcorner into km
        line3 = f.readline()
        header_x, xllcorner = line3.split()
        xllcorner_new = int(xllcorner) / 1000
        f.seek(2)
        f.write(re.sub(header_x, xllcorner_new)) #third argument??
        line4 = f.readline()
        header_y, yllcorner = line4.split()
        yllcorner_new = int(yllcorner) / 1000
        f.seek(3)
        f.write(re.sub(header_y, yllcorner_new))
        line5 = f.readline()
        header_size, cellsize = line5.split()
        cellsize_new = int(cellsize) / 1000
        f.seek(4)
        f.write(re.sub(header_size, cellsize_new))

Но, конечно, функции re.sub нужны три аргумента. Я не уверен, как еще это сделать. Я все еще новичок, поэтому я уверен, что есть легкий путь, но я не могу его найти. Можно ли как-то переписать эти строки в шапке, или есть другой способ?

1 Ответ

0 голосов
/ 22 января 2020

Вы должны записать в новый файл (а затем, возможно, скопировать этот новый файл поверх старого) вместо того, чтобы заменить старый файл на месте. Поскольку новые значения, которые вы записываете в файл, имеют другой размер в байтах, чем старые, изменение его на месте приведет к образованию мусора.

Что касается вашего specfi c вопроса о re.sub, вы можете найти документацию здесь: https://docs.python.org/3/library/re.html#re .sub . Требуется изменить строку в качестве третьего параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...