如果我文件的每一行的第6个元素是2,我想在同一行上添加4到元素10。我在添加时遇到了问题。
import csv
plusfour=[]
with open("101.txt", 'rb') as f:
reader = csv.reader(f)
# make it into a list
data = list(reader)
# for each line in data
dataline = 0
for i in data:
if data[dataline][5] is "2":
plusfour.append(int(data[dataline][9])+4)
print(plusfour)
#print(data[dataline][9])
dataline +=1
但它不会打印任何东西。我也试过
if data[dataline][5] is "2":
print(data[dataline][9])
这是有效的,所以问题在于我如何尝试为该值添加4。在将数据[dataline] [9]指定为可添加到的整数时,我无法弄清楚我上面做错了什么。
基本上,如果我的csv中一列的值是2,那么如何将4添加到同一行的另一列的值?我需要遍历每一行。
这是我加载的文件的一部分:
这是我的第二个代码段的输出:
编辑:我遇到了问题,因为我的一些价值观是空白的。我现在有这个:import csv
plusfour=[]
# open file with all subjects in it
with open("101.txt", 'rb') as f:
reader = csv.reader(f)
# make it into a list
data = list(reader)
# for each line in data
dataline = 0
valid_responses = ("1", "2")
for i in data:
if data[dataline][5] not in valid_responses:
plusfour.append("NA")
elif int(float(data[dataline][5])) == 2:
# add 4 to value of 10th element in same row
data[dataline][9] = int (float(data[dataline][9]))+4
plusfour.append(data[dataline][9])
print(plusfour)
elif int(float(data[dataline][5])) == 1:
plusfour.append(data[dataline][9])
dataline +=1
我收到此错误: data [dataline] [9] = int(float(data [dataline] [9]))+ 4 ValueError:无法将字符串转换为float:
答案 0 :(得分:1)
问题:
根据规则在输入文件中创建新列,以下是一些规则
<强> ALGO:强>
for row in reader:
ValueError
异常,则将新列值添加为NA
,然后写入输出文件并继续,即迭代下一行。ValueError
异常,则将新列值添加为NA
,然后写入输出文件并继续,即迭代下一行。 4
添加到第9项的值中并写入输出文件。<强>码强>
with open("101.txt", 'rb') as fp1:
reader = csv.reader(fp1)
#- open output file
with open('101_output.csv', 'wb') as fp2:
writer = csv.writer(fp2, delimiter=',')
#- Iterate on input files
for row in reader:
try:
item_5 = int(row[5])
except ValueError:
#- Create copy of row
new_row = list(row)
#- Append 9th value
new_row.append("NA")
#- Write row
writer.writerow(new_row)
print "Error1: Type Casting value %s"%row[5]
continue
new_row = list(row)
if item_5 == 2:
# add 4 to value of 10th element in same row
try:
item_13 = int(row[9])+4
new_row.append(item_13)
except ValueError:
new_row.append("NA")
elif item_5 == 1:
# keep data[dataline][9] the same
try:
item_13= int (row[9])+0
new_row.append(item_13)
except ValueError:
new_row.append("NA")
else:
#- add same value of 9th item to 13th item
new_row.append(row[9])
writer.writerow(new_row)
答案 1 :(得分:0)
试
import csv
plusfour=[]
with open("101.txt", 'rb' as f:
reader = csv.reader(f)
# make into a list
data = list(reader)
# counter
dataline = 0
for i in data:
if int(float(data[dataline][5])) == 2:
# add 4 to value of 10th element in same row
data[dataline][9] = int (float(data[dataline][9]))+4
plusfour.append(data[dataline][9])
print(plusfour)
dataline +=1
答案 2 :(得分:0)
有一点需要注意的是,你是mixing up equality with identity:
这一行:
if data[dataline][5] is "2":
将dataline[5]
的内容与另一个str("2"
)进行比较,以检查它们是否是相同的对象(标识)。这可能会失败,oyu真正想要的是检查它们是否相等(即,由相同顺序的相同字符组成),所以使用==
(相等):
if data[dataline][5] == "2":
另外,请确保您将相同类型"2"
(str
)不等于与2
(int)进行比较。
要确保转换为更常规的类型:
x = 2
y = "2"
x == y # False
str(x) == str(y) # True