簡體   English   中英

如何使Python只查看逗號分隔符之前或之后沒有空格的逗號

[英]How to make Python only look at commas with no space before or after as delimiters

我有一個csv文件,我正在嘗試讀取python,操作,然后寫入另一個csv文件。

我目前的問題是雖然文件是逗號分隔的,但並非所有逗號都是分隔符。

只有那些不是由前面的空間和/或隨后的逗號應該算作定界符。 (僅“,”而不是“,”或“,”)。

這是我的代碼的樣子:

import csv

#open file for reading
with open(mypath, 'r', encoding = 'utf_8') as csvfile:
    myfile = list(csv.reader(csvfile, dialect = 'excel', delimiter = ','))
    #specifying columns to be deleted
    BadCols = [29,28,27,25,21,20,19,18,16,15,14,13,12,11,8,7,4,3] 
    #Loop through column indices to be deleted
    for col in BadCols:        
        #Loop through each row to delete columns
        for i, row in enumerate(myfile):
            #Delete Column, which is basically a list item at that row
            myfile[i].pop(col)


#Open file for writing
with open(mypath2, "w", encoding = 'utf_8', newline='') as csvfile:
    csv_file = csv.writer(csvfile, dialect = 'excel', delimiter = ',')
    for i, row in enumerate(myfile):
        for j, col in enumerate(row):
            csvfile.write('%s, ' %col)
        csvfile.write('\n')
csvfile.close

這是我的數據的樣子:

Date,Name,City
May 30, 2016,Ryan,Boston

這是我在使用excel打開文件時想要看到的內容:

Date            Name    City
May 30, 2016    Ryan    Boston

這是我在Excel中實際看到的內容:

Date     [Blank column name]    Name   City
May 30   2016                   Ryan   Boston

因此,日期被讀作兩個元素而不是一個。

非常感激任何的幫助。

正則表達式可能是您最好的選擇:

import re

patt = re.compile(r"\b,\b")
with open("in.csv") as f:
    for row in map(patt.split, f):
        print(row)

哪個會給你:

['Date', 'Name', 'City\n']
['May 30, 2016', 'Ryan', 'Boston']

你將不得不照顧尾隨的空白,但這不應該是一個大問題。 顯然,如果你把"foo,bar"作為一個名字"foo,bar"你也會遇到問題"foo,bar"但如果沒有,那么re方法就沒問題了。

另一個選擇是用一個空格替換", "" ,"

import csv
import re

patt = re.compile(r"\s(,)|(,)\s")

with open("in.csv") as f:
    for line in csv.reader(map(lambda s: patt.sub(" ", s), f)):
        print(line)

因此對於:

Date,Name,City
May 30, 2016,Ryan,Boston
May 31 ,2016,foo,Narnia

你會得到:

['Date', 'Name', 'City']
['May 30 2016', 'Ryan', 'Boston']
['May 31 2016', 'foo', 'Narnia']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM