#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. Большое вам спасибо!