Python 如何获取csv行中每个字符串的长度,然后将其用于设置要获取的元素数的格式

Python 如何获取csv行中每个字符串的长度,然后将其用于设置要获取的元素数的格式,python,python-2.7,Python,Python 2.7,这是我到目前为止所做的,因为某种原因,这只占一行。我希望它做的是检查所有行以获得每个字符串的长度,然后如果字符串长度为=8,则抓取前10个元素。任何帮助都将不胜感激 #example data from Book1.csv #hello #thisislongerthaneight #whatareyoudoing #small import csv import os import unicodecsv reader = csv.reader(open('Book1

这是我到目前为止所做的,因为某种原因,这只占一行。我希望它做的是检查所有行以获得每个字符串的长度,然后如果字符串长度为=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
thisislong
whatareyou
small

您不需要csv库,每行有一个字符串,因此只需打开文件,检查每个字符串长度而不是行长度,切片并写入:

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))

使用后者的唯一原因是如果每行有多个逗号分隔的单词。

修复代码的缩进。您的输入数据看起来不是csv格式的。我尝试了相同的效果@martineau您正在执行
.writerow()
一次。您希望写入多少行?我在Book1.csv中有多少行@Goyo@PadraicCunningham的确我没注意到这是第一个字,不是最后一个。非常感谢@PadraicCunningham@Snowman41288,没问题,不客气。
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))
writer.writerows([s[:8] if len(s) <= 8 else s[:10] for s in row] for row in reader)
hello
thisislong
whatareyou
small