2016-09-06 3 views
-2

Люди, желающие получить предложения по наилучшему способу решения следующей задачи:
1. Считайте данные из файла CSV.
2. Отредактируйте XML-файл на основе данных, прочитанных в шаге 1.Лучший способ читать и писать два файла?

Я - питон noob. Пока я могу прочитать данные из файла CSV. В моем мире Java я просто передал данные «read» в метод и перебирал и редактировал XML-файл в этом методе.
Могу ли я сделать что-то подобное в Python? Есть ли более эффективный и более чистый способ достижения этого в Python?

import csv 

ifile = open('my-file.csv', "rb") 
reader = csv.reader(ifile) 

rownum = 0 
for row in reader: 
    #print row 
    if rownum == 0: 
     header = row 
    else: 
     colnum = 0 
     name = row[1] 
     desig = row[5] 
     print("Name: ", name) 
     print("Designation: ", desig) 


    rownum += 1 
    if rownum == 10: 
     break 

ifile.close() 
+0

Какова ваша проблема в вашем коде ? – SumanKalyan

+0

Нет проблем с кодом, указанным выше. Все, о чем я спрашиваю, это о том, как определить метод и передать аргументы? и если это правильный подход. – user1195192

+0

«Все, о чем я спрашиваю, это о том, как определить метод и передать аргументы». Шутки в сторону? Прочтите учебник. –

ответ

0

Очень похоже на ваше решение, просто использует enumerate и with вместо open и close:

import csv 

with open('my-file.csv', 'rb') as ifile: 
    reader = csv.reader(ifile) 
    for rownum, row in enumerate(reader): 
     #print row 
     if rownum == 0: 
      header = row 
     else: 
      colnum = 0 
      name = row[1] 
      desig = row[5] 
      print("Name: ", name) 
      print("Designation: ", desig) 
     if rownum == 10: 
      break 
+0

В чем преимущество использования перечисления и с открытым и закрытым? – user1195192

+1

«enumerate» - это встроенная функция, которая экономит ваше объявление об индексе и увеличивает его. 'with' полезен, потому что вам не нужно беспокоиться о закрытии файла - в случае ошибки, когда программа не запускается в файл' file.close(), файл все равно будет закрыт. –

2

Ваш вопрос не хватает немного ясности (что это, что вы ищете). Во всяком случае, от того, что я понял, вы ищете простой способ читать CSV файл и и распечатать Ith столбцов в определенном форматировании (например название: ...). Я предполагаю, что ваш файл выглядит следующим образом:

blah,Name,blahblah,blahblahblah,blahblahblahblah,Designation 
whatever,name1,whatever,whatever,whatever,Designation1 
whatever,name2,whatever,whatever,whatever,Designation2 
whatever,name3,whatever,whatever,whatever,Designation3 
whatever,name4,whatever,whatever,whatever,Designation4 
whatever,name5,whatever,whatever,whatever,Designation5 
whatever,name6,whatever,whatever,whatever,Designation6 

Если это так, то вот что я хотел бы сделать. Я хотел бы использовать известную панд библиотеку

import pandas as pd 

Прочитайте файл CSV в dataframe "ДФ"

df = pd.read_csv('my-file.csv') 

Заголовок переменная будет содержать имена столбцов

Метод
header = list(df) # the equivilant of your "row[0]" variable 

# 1 из печать необходимых данных

for i, j in zip(list(df['Name'].values), list(df['Designation'].values)): 
    print "Name: {} \nDesignation: {}".format(i, j) 

Это выводит следующее:

Name: name1 
Designation: Designation1 
Name: name2 
Designation: Designation2 
Name: name3 
Designation: Designation3 
Name: name4 
Designation: Designation4 
Name: name5 
Designation: Designation5 
Name: name6 
Designation: Designation6 

Метод # 2 печати необходимых данных

df['Name'] = df['Name'].map('Name: {}'.format) 
df['Designation'] = df['Designation'].map('Designation: {}'.format) 
print df[['Name', 'Designation']].head(n=10) 

Какой будет распечатать следующее:

0 Name: name1 Designation: Designation1 
1 Name: name2 Designation: Designation2 
2 Name: name3 Designation: Designation3 
3 Name: name4 Designation: Designation4 
4 Name: name5 Designation: Designation5 
5 Name: name6 Designation: Designation6 

 Смежные вопросы

  • Нет связанных вопросов^_^