Python Forum
csv to Table format output
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
csv to Table format output
#1
Hi experts..

I have a program like below
import pytablewriter
writer = pytablewriter.MarkdownTableWriter()
writer.table_name = "example_table"
writer.header_list = ["SERVICE NAME", "TEAM NAME", "CI OWNER", "SECONDARY CONTACT", "PAYCHECK NAME", "DEV", "DEVII","QA", "STAGE", "PROD", "PROD"]
writer.value_matrix = [
["accommodation", "POSE", "Donker","Khavarian","Acc", "Yes", "Yes", "Yes","Yes","Yes","Yes"],
["activity-entity", "Reg","Chang", "John", "TER", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes"],
]
writer.write_table()
This works well.. but my requirment is

1. I have hardcoded values for value_matrix above..instead I have a csv file which has around 340 rows , instead of hardcoding these into program , i need to read that file and store all rows in the value_matrix

2. now once we have all 340 rows are written into matrix, I want to pass SERVICE NAME which is first field in csv i.e in above example code accommodation as run time paramater so that it will output only that row...

can you please suggest how can i modify this program...

Best Regards
ASP
Reply
#2
import csv

...

with open('filename') as f:
    reader = csv.reader(f)
    for row in reader:
        ...
Reply
#3
I like to use pandas in such cases.


import pandas as pd
data = pd.read_csv('your_file.csv')

# now we can do anything with the data easily
data['SERVICE NAME'] # select column 'SERVICE NAME

data[data['SERVICE NAME'] == 'sname1'] # select rows, where SERVICE NAME == 'sname1'

data[data['SERVICE NAME'] == 'sname1']['SERVICE NAME'] = 'sname2' # rename `sname1` to `sname2`

data.to_csv('new_file.csv') # or overwrite your_file.csv... 
Reply
#4
(Apr-01-2018, 11:14 PM)scidam Wrote: I like to use pandas in such cases.


import pandas as pd
data = pd.read_csv('your_file.csv')

# now we can do anything with the data easily
data['SERVICE NAME'] # select column 'SERVICE NAME

data[data['SERVICE NAME'] == 'sname1'] # select rows, where SERVICE NAME == 'sname1'

data[data['SERVICE NAME'] == 'sname1']['SERVICE NAME'] = 'sname2' # rename `sname1` to `sname2`

data.to_csv('new_file.csv') # or overwrite your_file.csv... 

Thank for your reply ..

But when i run its giving all rows even I pass one service name when running. I think we need to define sysarg to pass service name parameter in this context ?
Reply
#5
(Apr-01-2018, 11:14 PM)scidam Wrote: I like to use pandas in such cases.


import pandas as pd
data = pd.read_csv('your_file.csv')

# now we can do anything with the data easily
data['SERVICE NAME'] # select column 'SERVICE NAME

data[data['SERVICE NAME'] == 'sname1'] # select rows, where SERVICE NAME == 'sname1'

data[data['SERVICE NAME'] == 'sname1']['SERVICE NAME'] = 'sname2' # rename `sname1` to `sname2`

data.to_csv('new_file.csv') # or overwrite your_file.csv... 

Hi

I googled little bit and wrote below to ahieve the result in pandas but getting erros

import pandas as pd
import pytablewriter

df = pd.read_csv('/opt/scripts/devv/book7.csv', delimiter=',')  -- reading entire file 
writer = pytablewriter.MarkdownTableWriter()
writer.table_name = "example_table"
writer.header_list = list(df.columns.values)   -- i am reading here header column
dfset = df.values.tolist() -- getting here entire data 
writer.value_matrix = dfset.loc[df['SERVICE NAME'] == 'checkout']  -- trying to pass one of the column value checkout to fetch that row
writer.write_table()
but getting below error

Traceback (most recent call last):
File "pdtest11.py", line 12, in <module>
writer.value_matrix = dfset.loc[df['SERVICE NAME'] == 'checkout']
AttributeError: 'list' object has no attribute 'loc'


Any help please
Reply
#6
dfset is a list, it hasn't .loc attribute.

writer.value_matrix = df.loc[df['SERVICE NAME'] == 'checkout'].values.tolist() #select all rows, where SERVICE NAME == 'checkout' 
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020