Python 如何获取csv行中每个字符串的长度,然后将其用于设置要获取的元素数的格式
这是我到目前为止所做的,因为某种原因,这只占一行。我希望它做的是检查所有行以获得每个字符串的长度,然后如果字符串长度为=8,则抓取前10个元素。任何帮助都将不胜感激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
#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