【问题标题】:Best way to read and write two files?读写两个文件的最佳方法?
【发布时间】:2017-01-14 05:56:48
【问题描述】:

各位,希望获得有关处理以下任务的最佳方法的建议:
1. 从 CSV 文件中读取数据。
2. 根据步骤 1 中读取的数据编辑 XML 文件。

我是 Python 菜鸟。到目前为止,我能够从 CSV 文件中读取数据。在我的 Java 世界中,我只需将“读取”数据传递给一个方法,然后在该方法中迭代和编辑 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()

【问题讨论】:

  • 你的代码有什么问题?
  • 上面发布的代码没有问题。我要问的是如何定义方法和传递参数?如果这是正确的方法。
  • “我要问的只是如何定义方法和传递参数”。严重地?阅读教程。
  • @StevenRumbalski 抱歉,我的意思是如果这样做是正确的做法?

标签: python xml csv scripting elementtree


【解决方案1】:

与您的解决方案非常相似,只是使用enumeratewith 而不是openclose

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

【讨论】:

  • 使用 enumerate 和 over open 和 close 有什么好处?
  • enumerate 是一个内置函数,可让您不必声明索引计数器并递增它。 with 很有用,因为您不必担心关闭文件 - 如果程序未运行到您的 file.close() 时出现错误,文件仍将关闭。
【解决方案2】:

您的问题缺少一点清晰性(您在寻找什么)。 无论如何,据我了解,您正在寻找一种简单的方法来读取 csv 文件并打印 ith 特定格式的列(例如 name: ... )。 我假设您的文件如下所示:

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

如果是这样,那么这就是我要做的。我会使用已知的 pandas 库

import pandas as pd

将 csv 文件读入数据框“df”

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

【讨论】:

    猜你喜欢
    • 2014-09-02
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2013-09-20
    • 2013-11-29
    相关资源
    最近更新 更多