Как выполнить np.genfromtxt файл utf-8? python3 numpy [duplicate]

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int i = scan.nextInt();
        scan.nextLine();
        double d = scan.nextDouble();
        scan.nextLine();
        String s = scan.nextLine();

        System.out.println("String: " + s);
        System.out.println("Double: " + d);
        System.out.println("Int: " + i);
    }
8
задан JustAC0der 7 October 2015 в 20:06
поделиться

1 ответ

В Python3 я могу сделать:

In [224]: txt = "Côte d'Ivoire"
In [225]: x = np.zeros((2,),dtype='U20')
In [226]: x[0] = txt
In [227]: x
Out[227]: 
array(["Côte d'Ivoire", ''],   dtype='<U20')

Это означает, что я, вероятно, мог бы открыть файл UTF-8 (обычный, а не байтовый режим) и строки чтения и назначить их элементам массив x.

Но genfromtxt настаивает на работе с байтовыми строками (ascii), которые не могут обрабатывать большой UTF-8 набор (7 байт v 8). Поэтому мне нужно применить decode в какой-то момент, чтобы получить массив U.

Я могу загрузить его в массив 'S' с помощью genfromtxt:

In [258]: txt="Côte d'Ivoire"
In [259]: a=np.genfromtxt([txt.encode()],delimiter=',',dtype='S20')
In [260]: a
Out[260]: 
array(b"C\xc3\xb4te d'Ivoire",  dtype='|S20')

и примените decode к отдельным элементам:

In [261]: print(a.item().decode())
Côte d'Ivoire

In [325]: print _
Côte d'Ivoire

Или используйте np.char.decode, чтобы применить его к каждому элементу массива:

In [263]: np.char.decode(a)
Out[263]: 
array("Côte d'Ivoire", dtype='<U13')
In [264]: print(_)
Côte d'Ivoire

genfromtxt позволяет мне укажите converters:

In [297]: np.genfromtxt([txt.encode()],delimiter=',',dtype='U20',
    converters={0:lambda x: x.decode()})
Out[297]: 
array("Côte d'Ivoire", dtype='<U20')

Если csv имеет сочетание строк и цифр, этот converters подход будет более простым в использовании, чем np.char.decode. Просто укажите конвертер для каждого столбца строки.

(см. Мои предыдущие изменения для попыток Python2).

8
ответ дан hpaulj 26 August 2018 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: