Próbuję wyodrębnić określoną kolumnę z arabskiego pliku do innego pliku, jest to mój kod

# 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()

A plik jest taki:

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

Utrzymuję ten sam błąd:

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

3 odpowiedzi

Najlepsza odpowiedź

Widzę kilka problemów z kodem. Najpierw używasz podpisu funkcji {X0}} za pomocą os.open, ale ma różne paramery. Możesz trzymać się open. Co ważniejsze, wydajesz się, że próbujesz naprawić rząd wychodzący z csv.reader, dzieląc go ponownie na zakładkach.

Domyślam się, że widziałeś całą linię w row[0], więc próbował go naprawić. Ale problem polega na tym, że czytelnik domyślnie dzieli się przecinkami - musisz dostarczyć inny separator. Tutaj jest trochę problematyczny, ponieważ Twój kod podzielają kartę, ale przykład pokazuje spacje. Użyłem spacji w moim rozwiązaniu, ale możesz przełączyć to w razie potrzeby.

Wreszcie, próbowałeś zakodować struny przed podaniem ich obiektu pliku wyjściowego. Ten obiekt powinien być otwarty z prawym kodowaniem i powinieneś po prostu dać mu ciągi.

# 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)
1
tdelaney 5 czerwiec 2018, 06:10

Możesz spróbować użyć Pandas. Opublikuję kod próbny.

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)

Iuput: Wpisz opis obrazu tutaj Uwaga: Mam nadzieję, że przyjmuje kodowanie arabskie.


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) 
0
Hayat 5 czerwiec 2018, 06:29

Możesz spróbować używać Unicodecsv

Jak pisać UTF-8 w pliku 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
Arun Kumar Nagarajan 5 czerwiec 2018, 06:27