我的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)
我不知道我的代码片段有什么问题。结果在开头有荒谬的标记
答案 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