在python中读取、更改并写入csv数据

2024-09-30 08:18:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将已格式化的数据输出到csv文件?我相信在我清理每一行的时候可以写下每一行,但我不知道怎么写。我尝试实现的基本目标是遍历csv的所有行,只更改满足for循环条件的行中的项。然后将所有已更改和未更改的行输出到另一个csv。在

import csv
import sys
import re

fileToClean = open(sys.argv[1], 'rb')
readerObj = csv.reader(fileToClean)

for row in readerObj:
  for item in row:
    if " TB" in item:
      newitem = item.replace(" TB","")
      result = re.sub('[^0-9]','',newitem)
      result = float(newitem) * 1024
      result = round(result, 2)
    elif " MB" in item:
      newitem =  item.replace(" MB", "")
      result = re.sub('[^0-9]','',newitem)
      result = float(result) / 1000
      result = round(result, 2)
    elif " GB" in item:
      newitem = item.replace(" GB", "")
      result = re.sub('[^0-9]','',newitem)
      result = float(result)
      result = round(result, 2)

Tags: csvinimportreforsysresultfloat
2条回答

一种简单的方法可以完成您正在尝试的操作,即将文件作为list读取,进行更改,然后将列表写入新文件:

import csv
import sys
import re

fileToClean = open(sys.argv[1], 'rb')
readerObj = list(csv.reader(fileToClean))

# ...iterate through readerObj, changing whatever items you want...

with open("newFile", "w") as csvfile:
    wr = csv.writer(csvfile,delimiter=',')
    for line in readerObj:
        wr.writerow(line)
newfile = open("test.csv", "w")
for row in readerObj:
  newrow = []
  for item in row:
    if " TB" in item:
      item = item.replace(" TB", "")
      item = re.sub('[^0-9]', '', item)
      item = float(item) * 1024
      item = round(item, 2)
    elif " MB" in item:
      item =  item.replace(" MB", "")
      item = re.sub('[^0-9]', '', item)
      item = float(item) / 1000
      item = round(item, 2)
    elif " GB" in item:
      item = item.replace(" GB", "")
      item = re.sub('[^0-9]', '', item)
      item = float(item)
      item = round(item, 2)
    newrow.append(str(item))
  newfile.write(','.join(newrow) + '\n')
newfile.close()
fileToClean.close()

相关问题 更多 >

    热门问题