查找第一次出现的代码,如果没有出现,则返回0,然后将新列附加到csv(python)上
我试图在csv中提取列中的值。以下是我目前的代码:查找第一次出现的代码,如果没有出现,则返回0,然后将新列附加到csv(python)上,python,string,loops,csv,if-statement,Python,String,Loops,Csv,If Statement,我试图在csv中提取列中的值。以下是我目前的代码: ```code``` import csv with open('Cash_Statement_Pier21 accounts 2019c.csv') as csv_file: csv_reader = csv.reader(csv_file, delimiter=',') line_count = 0 for row in csv_reader: for line in row: index = line.find('
```code```
import csv
with open('Cash_Statement_Pier21 accounts 2019c.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
line_count = 0
for row in csv_reader:
for line in row:
index = line.find('@')
if index != -1:
print(line[index+2:index+7])
else:
index = line.find('RATE')
if index != -1:
print(line[index +2])
但是,对于包含多个@s的行,此代码失败,并且它只在python中打印列表。怎样
我是否会附加此代码,使其a只考虑每行上的第一个@和b
在我的csv中创建新列
非常感谢
编辑样本输入分隔行以提高可读性
诺和诺德A/S 216757.000 SHS@5.15000000 EXDTE-22MAR19 PAYDTE-26MAR19应纳税可回收税率为.270000%
诺和诺德A/S 205395.000 SHS@3.00000000 EXDTE-2016年8月19日PAYDTE-20年8月19日应税可回收税率为.270000%
诺和诺德A/S退税支付79000.000 EX-DT:20MAR15 PY-DT:24MAR15货币小费1150790014348
香港平安保险集团有限公司/02318 1184000.000 SHS@1.2841439EXDTE-23MAY19 PAYDTE-28JUN19,按发行率征税。100000%
BANK CENTRAL ASIA TBK PT 3314200.000 SHS @ 100.00000000 EXDTE-06DEC19 PAYDTE-20DEC19 TAXABLE AT ISSUE RATE .200000%
这里有两个不同的问题 如何仅处理第一行@或每行 我将假设,不管您显示了什么,您实际上正在处理一个真正的csv文件,每行有多个字段,并且只希望处理包含@caracter的第一个字段。如果您不想在找到@的情况下搜索RATE,这很简单:只需添加一个break语句:
for row in csv_reader:
for line in row:
index = line.find('@')
if index != -1:
print(line[index+2:index+7])
break // ignore any other field in that row
else:
...
如果要处理每行上的第一个@和第一个速率,则必须使用布尔值忽略除第一个之外的任何@,但仍以某个速率继续:
如何向CSV添加新字段
CSV是一个文本文件。唯一可靠的更改方法是重写临时文件上的所有内容,完成后删除旧文件或将其重命名为备份,并将临时文件重命名为原始名称。或多或少只显示高水平:
ok = False
with open('Cash_Statement_Pier21 accounts 2019c.csv') as csv_file:
with open('Cash_Statement_Pier21 accounts 2019c.tmp', 'w',', newline='') as out_file:
csv_reader = csv.reader(csv_file, delimiter=',')
csv_writer = csv.writer(out_file, delimiter=')
for row in csv_reader:
...
row.append(new_column_value)
csv_writer.writerow(row)
ok = True
if ok: // do not rename if an error occured...
os.remove('Cash_Statement_Pier21 accounts 2019c.csv')
os.rename('Cash_Statement_Pier21 accounts 2019c.tmp',
'Cash_Statement_Pier21 accounts 2019c.csv)'
我们必须在with块结束后等待执行重命名,因为某些操作系统可能会拒绝删除或重命名打开的文件
嗨,乔尔,你能提供一个输入和输出的例子,让事情更清楚吗?谢谢。请以文本而不是图片的形式提供示例输入数据。谢谢。抱歉,您的第一个假设是正确的,代码运行正常。保存csv的部分不适用于以下错误:TypeError:“newline”是此函数的无效关键字参数。我的错误。。。换行符=是open函数的一个参数。编辑后谢谢!非常感谢你的帮助
ok = False
with open('Cash_Statement_Pier21 accounts 2019c.csv') as csv_file:
with open('Cash_Statement_Pier21 accounts 2019c.tmp', 'w',', newline='') as out_file:
csv_reader = csv.reader(csv_file, delimiter=',')
csv_writer = csv.writer(out_file, delimiter=')
for row in csv_reader:
...
row.append(new_column_value)
csv_writer.writerow(row)
ok = True
if ok: // do not rename if an error occured...
os.remove('Cash_Statement_Pier21 accounts 2019c.csv')
os.rename('Cash_Statement_Pier21 accounts 2019c.tmp',
'Cash_Statement_Pier21 accounts 2019c.csv)'