编辑原始csv文件

时间:2016-11-29 16:41:24

标签: python python-2.7 csv

我的csv文件中有三个不同的列,它们具有相应的值。 csv文件中的B列(名称列)具有全部大写的值。我正在尝试将其转换为第一个字母大写字母,但是当我运行代码时,它会将所有列压缩在一起并用引号括起来。

(int num) = foo; 
(var num) = foo;
//Both give error: The name `num` does not exist in the current context.

我的代码:

The Original File:

Company        Name                 Job Title
xxxxxx        JACK NICHOLSON        Manager
yyyyyy        BRAD PITT             Accountant

I am trying to do:

Company        Name                 Job Title
xxxxxx        Jack Nicholson        Manager
yyyyyy        Brad Pitt             Accountant

我运行代码后的结果是:它不是返回三个不同的列,而是使用title()语法调整第二列,而是返回所有三列在一列中用引号压缩。

import csv


with open('C:\\Users\\Data.csv', 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    data = list(reader)

for item in data:
    if len(item) > 1:
        item[1] = item[1].title()

with open('C:\\Users\\Data.csv', 'wb') as f:
    writer = csv.writer(f, delimiter='\t')
    writer.writerows(data)  

我不知道我的代码片段有什么问题。结果在开头有荒谬的标记

3 个答案:

答案 0 :(得分:1)

使用read_fwf轻微更改Mohammed的解决方案,以简化文件读取。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_fwf.html

<

修改 更改为在lambda上使用字符串方法。我更喜欢使用lambdas作为最后的结果。

答案 1 :(得分:0)

你可以用pandas做这样的事情:

import pandas as pd

df = pd.read_csv('old_csv_file', sep='\s{3,}')
df.Name = df.Name.apply(lambda x: x.title())
df.to_csv('new_csv_file', index=False, sep='\t')

string.title()将字符串转换为标题大小写,即字符串中单词的每个首字母大写,后续字母转换为小写。

使用df.apply,您可以对整个列或行执行某些操作。

&#39; \ S {3,}&#39;是一个正则表达式 \ s是一个空格字符。 \ s {3,}超过3个空格。

当您阅读CSV格式时,您必须指定列的分隔方式 通常,列以逗号或制表符分隔。但在你的情况下,你在每一列之间有5,6个空格 所以通过使用\ s {3,}我告诉CSV处理器一行中的列被超过3个空格分隔。

如果我只使用\ s那么它会将First Name和Last Name视为两个单独的列,因为它们之间有1个空格。因此,通过3个以上的空格,我将名字和姓氏作为一个列。

答案 2 :(得分:0)

请注意outpu将每行存储为仅包含一个字符串的Kafka

如果长度为1,则此data块中的语句将不会执行。

list

除此之外,不需要以二进制格式进行读写。

if