извлечь столбец из CSV-файла Python - PullRequest
0 голосов
/ 05 июня 2018

я пытаюсь извлечь определенный столбец из арабского файла в другой файл, это мой код

# coding=utf-8
import csv
from os import open

file = open('jamid.csv', 'r', encoding='utf-8')
test = csv.reader(file)
f = open('col.txt','w+', 'wb' ,encoding='utf-8')
for row in test:

    if len(row[0].split("\t"))>3 :
         f.write((row[0].split("\t"))[3].encode("utf-8"))

f.close()

, и файл выглядит так:

4   جَوَارِيفُ  جواريف  جرف     اسم 
18  حَرْقى  حرقى    حرق     اسم
24  غَزَواتٌ    غزوات   غزو     اِسْمٌ

я продолжаю дратьсята же ошибка:

File "col.py", line 5, in <module>  file = open('jamid.csv', 'r', encoding='utf-8')
TypeError: an integer is required (got type str)

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Вы можете попробовать использовать unicodecsv

Как записать UTF-8 в CSV-файл

# coding=utf-8
import csv
import unicodecsv as csv

file = open('jamid.csv', 'rb')
test = csv.reader(file, delimiter='\t')
f = open('col.txt', 'wb')
for row in test:
    if len(row)>3 :
         f.write(row[3].encode('utf8'))

f.close()
0 голосов
/ 05 июня 2018

Я вижу пару проблем с вашим кодом.Во-первых, вы используете сигнатуру функции open с os.open, но она имеет разные параметры.Вы можете придерживаться open.Что еще более важно, вы, кажется, пытаетесь исправить строку, выходящую из csv.reader, снова разделив ее на вкладки.

Полагаю, вы видели всю строку в row[0], поэтому попытались это исправить.Но проблема в том, что ридер по умолчанию разделяется на запятые - вам нужно указать другой разделитель.Здесь это немного проблематично, потому что ваш код разделен вкладкой, но в примере показаны пробелы.Я использовал пробелы в своем решении, но вы можете переключать его по мере необходимости.

Наконец, вы попытались закодировать строки перед передачей их объекту выходного файла.Этот объект должен быть открыт с правильной кодировкой, и вы должны просто дать ему строки.

# coding=utf-8
import csv

with open('jamid.csv', 'r', newline='', encoding='utf-8') as in_fp:
    with open('col.txt','w', newline='', encoding='utf-8') as out_fp:
        csv.writer(out_fp).writerows(row[3] for row in
            csv.reader(in_fp, delimiter=' ', skipinitialspace=True)
            if len(row) >= 3)
0 голосов
/ 05 июня 2018

Вы можете попробовать использовать Pandas.Я публикую пример кода.

import pandas as pd
df = pd.read_csv("Book1.csv")
# print(df.head(10))
my_col = df['اسم'] #Insert the column name you want to select.
print(my_col)

Ouput: enter image description here Примечание. Надеюсь, что требуется арабское кодирование.


import pandas as pd 
df = pd.read_csv("filename.csv",encoding='utf-8') 
saved_column = df['اسم'] #change it to str type
# f= open("col.txt","w+",encoding='utf-8') 
with open("col3.txt","w+",encoding='utf-8') as f:
    f.write(saved_column) 
...