这是我到目前为止由于某种原因这只会抓住一行。我想要做的是检查所有行以获得每个字符串的长度然后如果字符串长度是< = 8只抓取前8个元素或者如果字符串长度是> = 8抓住前10个元素。任何帮助将不胜感激。
#example data from Book1.csv
#hello
#thisislongerthaneight
#whatareyoudoing
#small
import csv
import os
import unicodecsv
reader = csv.reader(open('Book1.csv', 'rb'))
writer = csv.writer(open('Book2.csv', 'wb'))
for row in reader:
length = len(row)
if length <= 8:
newRow = [elem[: 8]
for elem in row
]
elif length >= 8:
newRow = [elem[: 10]
for elem in row
]
writer.writerow(newRow)
所以我现在得到的只是这个
hello
我想知道的是这个
hello
thisislong
whatareyou
small
答案 0 :(得分:1)
你不需要csv lib,你每行都有一个字符串,所以只需打开文件,检查每个字符串长度不是行长,切片并写:
with open('Book1.csv') as f, open('Book2.csv'') as out:
out.writelines(s[:8]+ "\n" if len(s) <= 8 else s[:10]+"\n"
for s in map(str.rstrip, f))
您需要删除换行符,因为您必须将它们添加回切片字符串,如果您不能在最后为两个字符少于8个字的单词添加两个换行符。
如果每行有多个单词,并希望将逻辑应用于每个单词:
writer.writerows([s[:8] if len(s) <= 8 else s[:10] for s in row] for row in reader)
两者都会给你:
hello
thisislong
whatareyou
small
使用后者的唯一原因是每行有多个逗号分隔的单词。