关于#双引号#的问题,如何解决?


import os
import gzip
import pandas as pd

files = [f for f in os.listdir('.') if f.endswith('.csv.gz')]

for f in files:
    with gzip.open(f, 'rb') as f_in:
        with open(f[:-3], 'wb') as f_out:
            f_out.write(f_in.read())
    df = pd.read_csv(f[:-3])
    file_name = f[:-7].split('_')
    df.insert(0, 'FileName', f[:-3])
    df.insert(1, 'RowNumber', range(1, len(df)+1))
    df.insert(2, 'LastFour', file_name[3][-4:])
    df.insert(len(df.columns), 'FirstEight', file_name[3][:8])
    df.insert(len(df.columns), 'SecondPart', file_name[1])
    df.to_csv(f[:-3], index=0, sep='|', encoding='utf-8',header=None)

运行完后发现原数据首尾各多出一个双引号

可以尝试一下下面的处理方式:

  • 在读取 CSV 文件时指定 quotechar 参数,把双引号设为没有意义的字符,这样就可以去掉多余的双引号了。例如:
df = pd.read_csv(f[:-3], quotechar=' ')
  • 使用正则表达式来去掉首尾的双引号。例如:
import re

# 去掉首尾的双引号
df = df.applymap(lambda x: re.sub('^"|"$', '', x))
  • 在写入 CSV 文件时指定 quoting 参数为 csv.QUOTE_NONE,这样就可以避免在写入时出现多余的双引号了。例如:
import csv
df.to_csv(f[:-3], index=0, sep='|', encoding='utf-8', header=None, quoting=csv.QUOTE_NONE)

双引号代表这是个字符串
比如“123”是个字符串
如果你想把它变成123这样的int型,做个类型转换啊

或許應該列出部分原數據(可以修改敏感內容)。
讓其他人有足夠的資料做測試。