【问题标题】:Truncate a column of a csv file?截断csv文件的列?
【发布时间】:2017-02-07 19:45:31
【问题描述】:

我是 Python 新手,我有以下 csv 文件(我们称之为 out.csv):

DATE,TIME,PRICE1,PRICE2
2017-01-15,05:44:27.363000+00:00,0.9987,1.0113
2017-01-15,13:03:46.660000+00:00,0.9987,1.0113
2017-01-15,21:25:07.320000+00:00,0.9987,1.0113
2017-01-15,21:26:46.164000+00:00,0.9987,1.0113
2017-01-16,12:40:11.593000+00:00,,1.0154
2017-01-16,12:40:11.593000+00:00,1.0004,
2017-01-16,12:43:34.696000+00:00,,1.0095

我想截断第二列,使 csv 看起来像:

DATE,TIME,PRICE1,PRICE2
2017-01-15,05:44:27,0.9987,1.0113
2017-01-15,13:03:46,0.9987,1.0113
2017-01-15,21:25:07,0.9987,1.0113
2017-01-15,21:26:46,0.9987,1.0113
2017-01-16,12:40:11,,1.0154
2017-01-16,12:40:11,1.0004,
2017-01-16,12:43:34,,1.0095

这是我目前所拥有的......

with open('out.csv','r+b') as nL, open('outy_3.csv','w+b') as nL3:
  new_csv = []
  reader = csv.reader(nL)
  for row in reader:
      time = row[1].split('.')
      new_row = []
      new_row.append(row[0])
      new_row.append(time[0])
      new_row.append(row[2])
      new_row.append(row[3])
      print new_row
      nL3.writelines(new_row)
  1. 在将每一行写入新的 csv 文件后,我似乎无法获得新的一行。
  2. 这绝对不像pythonic

谢谢

【问题讨论】:

  • 您似乎已经尝试了一些。你能告诉我你做了什么吗?
  • 所以你希望有人给你写段代码来展示pythonic和非pythonic的方式吗?问题是前者可能不止一个,而后者可能有无数个......也许你学习东西的最好方法是尝试自己编码,如果你不能让它工作或者认为可能有更好的方法,然后开始在这里提问。
  • @martineau 这样更好吗?
  • 是的,这样更好,现在您的问题已重新打开。

标签: python python-2.7 csv truncate


【解决方案1】:

缺少换行符的问题是因为file.writelines() 方法不会自动将行分隔符添加到它传递的参数的元素中,它期望是一个字符串序列。如果这些元素代表不同的行,那么您有责任确保每个元素都以换行符结尾。

但是,您的代码试图使用它来仅输出单行输出。要解决这个问题,您应该改用file.write(),因为它希望其参数是单个字符串——如果您希望该字符串成为文件中的单独行,它必须以换行符结尾或手动添加一个换行符。

下面是执行您想要的操作的代码。它通过更改 csv.reader 返回 in-place 的字符串列表的元素之一,然后将修改后的列表作为 single 字符串写入输出文件通过join()将它们全部重新组合在一起,然后手动在结果末尾添加换行符(存储在new_row中)。

import csv

with open('out.csv','rb') as nL, open('outy_3.csv','wt') as nL3:
    for row in csv.reader(nL):
        time_col = row[1]
        try:
            period_location = time_col.index('.')
            row[1] = time_col[:period_location]  # only keep characters in front of period
        except ValueError:  # no period character found
            pass  # leave row unchanged
        new_row = ','.join(row)
        print(new_row)
        nL3.write(new_row + '\n')

打印(和文件)输出:

DATE,TIME,PRICE1,PRICE2
2017-01-15,05:44:27,0.9987,1.0113
2017-01-15,13:03:46,0.9987,1.0113
2017-01-15,21:25:07,0.9987,1.0113
2017-01-15,21:26:46,0.9987,1.0113
2017-01-16,12:40:11,,1.0154
2017-01-16,12:40:11,1.0004,
2017-01-16,12:43:34,,1.0095

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多