Я пытаюсь записать сайты в CSV и работать с этими данными, но текстовые формулы не будут работать должным образом. Я действительно не понимаю, что делаю неправильно, но я думаю, что это часть кодирования.
Это часть python:
page = requests.get(url)
encoding = page.encoding if 'charset' in page.headers.get('content-type', '').lower() else None
soup = BeautifulSoup(page.content, 'html.parser', from_encoding=encoding)
example = soup.find(class_= htmlClass).get_text()
example = "".join([s for s in example.splitlines(True) if s.strip()])
example = example.splitlines()
outputList.append(example)
[...]
with open(outputFile, "w") as fileHandle:
fileHandle.writelines(outputFileData)
Текст в csv выглядит нормально, но если я пытаюсь получить некоторые формулы MATCH, он часто не находит данные. =MATCH("*13 MARCH*";F1:F20;0)
даст N / A, пока в столбце есть текст 13 МАРТА.
Я сделал много изменений и проверил, и я заметил, что когда я использую это: with codecs.open(outputFile, "w", "utf-8") as fileHandle:
У меня есть специальные символы в CSV-файл, и это, вероятно, объясняет, что формулы MATCH неправильно находят текст.
Если это помогает, я фактически импортирую CSV-файл в googlesheet с помощью сценария, а затем работаю с формулами MATCH, сценарий:
function importFromCSV() {
var file = DriveApp.getFilesByName("menulist.csv");
var csvFile = file.next().getBlob().getDataAsString();
var csvData = Utilities.parseCsv(csvFile, ";");
var ss = SpreadsheetApp.openById("xxx");
var sheet = ss.getSheetByName('import');
sheet.getRange('A7:AZ60').clear()
sheet.getRange(7,1, csvData.length, csvData[0].length).setValues(csvData);
}
У меня были рубины с вышеприведенным и я добавил var csvFile = file.next().getBlob().getDataAsString('ISO-8859-1');
, чтобы избежать рубинов, но формула MATCH по-прежнему не работает.
И идея, что я делаю не так с кодировкой?