Как прочитать файл как .dat и записать его как .txt

#python-3.x #pickle

#python-3.x #рассол

Вопрос:

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

Вот мой код (пожалуйста, не жарьте, я очень новичок, я знаю, что это отстой и содержит много ошибок, просто оставьте меня в покое xD):

 #import dependencies
import sys
import pickle
import time

#define constants and get file path
data = []
index = 0
path = input("Absolute file path:n")

#checks if last character is a space (common in copy pasting) and removes it if there is a space
if path.endswith(' '):
    path = path[:-1]


#load the .dat file into a list names bits
bits = pickle.load(open(path, "rb"))

with open(path, 'rb') as fp:
    bits = pickle.load(fp)

#convert the data from bits into a new list called data
while index < len(bits):
    print("Decoding....n")
    storage = bits[index]
    print("Decoding....n")
    str(storage)
    print("Decoding....n")
    data.append(storage)
    print("Decoding....n")
    index  = 1
    print("Decoding....n")
    time.sleep(0.1)

#removes the .dat of the file
split = path[:-4]

#creates the new txt file with _converted.txt added to the end
with open(f"{split}_convert.txt", "wb") as fp:
    pickle.dump(data, fp)

#tells the user where the file has been created
close_file = str(split) "_convert.txt"
print(f"nA decoded txt file has been created. Run this command to open it: cd {close_file}nn")
  

Краткий обзор; Я устанавливаю переменную с именем data, которая содержит все данные из файла .dat, затем я хочу сохранить переменную в .txt-файл, но всякий раз, когда я сохраняю его в .txt-файл, он содержит содержимое файла .dat, хотя, когда явызов print(data) сообщает мне данные в виде обычного, разборчивого текста. Спасибо за любую помощь.

Ответ №1:

 with open(f"{split}_convert.txt", "wb") as fp:
    pickle.dump(data, fp)
  

Когда вы открываете файл в wb режиме mode, он автоматически записывает в него двоичные данные. Чтобы записать обычный текст в файл .txt, используйте

 with open(f"{split}_convert.txt", "w") as fp:
    fp.write(data)
  

Поскольку data это список, вы также не можете записать его сразу. Вам нужно будет записать каждый элемент, используя цикл.

 with open(f"{split}_convert.txt", "w") as fp:
    for line in data:
        fp.write(line)
  

Для получения более подробной информации о записи файла, ознакомьтесь также с этой статьей: https://www.tutorialspoint.com/python3/python_files_io.htm

Комментарии:

1. Я пробовал это, каждый раз, когда я это делаю, файл оказывается пустым.

2. Да, это работает, но я бы предпочел получить файл .txt.

3. Большое вам спасибо!