Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找第一次出现的代码,如果没有出现,则返回0,然后将新列附加到csv(python)上_Python_String_Loops_Csv_If Statement - Fatal编程技术网

查找第一次出现的代码,如果没有出现,则返回0,然后将新列附加到csv(python)上

查找第一次出现的代码,如果没有出现,则返回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('

我试图在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('@')
        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)'