Как сохранить только ascii и отказаться от non-ascii, nbsp, et c при выполнении json .dumps - PullRequest
0 голосов
/ 30 января 2020

Я читаю csv-файлы, используя csv reader, а затем преобразую его в json -файл, используя словарь.
При этом мне нужны только буквы и цифры без символов, отличных от ascii или nbsp. Я пытаюсь сделать это так:

with open ('/file', 'rb') as file_Read:
     reader = csv.reader(file_Read)
     lis = []
     di = {}
     for r in reader:
         di = {r[0].strip():[some_val]}
         lis.append(di)

with open('/file1', 'wb') as file_Dumped:
     list_to_be_written = json.dumps(lis)
     file_Dumped.write(liss)

Когда я читаю файл, вывод, он состоит из последовательностей, подобных \xa0\xa0\xa0\xa0 вместе с ключами.
Ex - {"name \xa0\xa0\xa0\xa0":[9]}
Если я сделаю json.dumps(lis,ensure_ascii=False), то я вижу пустые места вокруг клавиш.
Пример - {"name ":[9]}
Как мне полностью удалить все, кроме букв и цифр?

Ответы [ 2 ]

1 голос
/ 30 января 2020

Если пробелы находятся только в конце строки, вы можете использовать .strip(). Если вам нужно оставить пробелы между символами ascii, вы можете использовать что-то вроде этого:

my_string.replace('  ', '').strip()

Чтобы удалить символы не ascii, попробуйте следующее:

my_string = 'name  \xa0\xa0\xa0\xa0'
my_string.encode('ascii', 'ignore').strip()
0 голосов
/ 30 января 2020

Вы можете попробовать это:

import pandas as pd
import json
# Read the csv file using pandas
df = pd.read_csv("YourInputCSVFile")

#Convert all column types to str in order to remove non-ascii characters
df = df.astype(str)

#Iterate between all columns in order to remove non-ascii characters
for column in df:
    df[column] = df[column].apply(lambda x: ''.join([" " if ord(i) < 32 or ord(i) > 126 else i for i in x]))

#Convert the dataframe to dictionary for json conversion
df_dict = df.to_dict()

#Save the dictionary contents to a json file
with open('data.json', 'w') as fp:
    json.dump(df_dict, fp)

...