【问题标题】:Reading CSV - Python读取 CSV - Python
【发布时间】:2017-12-18 00:45:49
【问题描述】:

我有一个包含一些数据的 csv 文件,我在 b 列中有名称,在 A 列中有一些相关信息。但并非所有名称都有相关信息

    A                   B
 1                      JOHN
 2                      JANE
 3 jane@email.com
 4 phone:0800etcetc 
 5                      ZAIN
 6                      MIKE
 7 email
 8 phon et etc

我正在尝试编写一个代码,如果 A 列中有信息,则该代码将读取 A 列,我希望它在 B 列中打印该名称之前的名称,而不是打印具有该名称的信息。

我希望这是有道理的。如果有办法,请告诉我。

这是我想要的输出。谢谢大家的帮助。

             A                    B
1           John                   
2           JANE                    jane@email.com
3           JANE                    phone:0800 etc etc
4           ZAIN       
5           MIKE                    email
6           MIKE                    Phone

【问题讨论】:

  • 在您上面发布的示例中,您能否展示您的预期输出?不确定我是否理解您想要完成的任务

标签: python python-3.x csv pandas


【解决方案1】:

使用csv library

所以,是这样的:

import csv
with open('tmp.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    name = None
    for row in reader:
        if row[1]: 
            name = row[1]
            print(name)
        else:
            print(' '.join([name, row[0]]))

输出:

B
John
JANE
JANE jane@email.com
JANE phone:foo
ZAIN
MIKE
MIKE email
MIKE phone

我看不出用回顾来区分的方法。

通常,如果您使用的是 Pandas,则可以使用内置功能。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

import pandas as pd
df = pd.read_csv('your_file.csv')

注意:直接读/写 csv 文件是不好的做法。您应该使用 csv 库 (import csv) 或 pandas。这样做的原因是它们处理特殊字符、转义类型、提供分隔符选项以及随着时间的推移在生产环境中发生的所有边缘情况。

【讨论】:

    【解决方案2】:

    您应该尝试以下方法:

    import sys
    
    csvFile = open('pathOfCSV','r')
    for line in csvFile.readlines():
        l = line.split()
        if len(l) > 1: # informations in columns A and B
            sys.stdout.write('ColumnA : %s, ColumnB : %s\n'%(l[0],l[1]))
    csvFile.close()
    

    如果你的 csv 文件不是太大,这个工作,如果不是你必须使用readline()function 和批处理你的文件。

    【讨论】:

    • 你不仅不应该在 csv 文件上读取行,而且你应该只使用 print 方法,而不是 sys.stdout。
    • 打印是一样的。我更喜欢使用 sys.stdout 因为它对我更好,有时我使用 stdout 有时使用 stderr,它更清晰
    • 为此,您应该使用 logger.info / logger.error .. 您可以做自己喜欢的事情,但通常目标是为了简单。只是另一种意见。通常打印不用于任何规模应用
    【解决方案3】:

    不确定你想做什么,但你可以阅读你的文件:

    out_file = open("out_file.csv", "w", encoding="your encoding")
    with open("file.csv", "r", encoding="your encoding") as file:
        for line in file:
            cut = line.split("your separator")
            colA = cut[0]
            colB = cut[1]
    
            # you can output result with:
            output = colA + "\t"   # any separator you want
            output += colB + "\n"
            out_file.write(output)
    

    您可以在 for 中的 col A 上进行测试并更改输出。

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 2017-07-26
      • 1970-01-01
      • 2021-03-26
      • 2020-10-19
      • 2017-06-04
      相关资源
      最近更新 更多