Skip to content

Instantly share code, notes, and snippets.

@navhits
Created December 15, 2021 10:48
Show Gist options
  • Save navhits/3e7c9e80506a571d4e5c1b2aca024eb1 to your computer and use it in GitHub Desktop.
Save navhits/3e7c9e80506a571d4e5c1b2aca024eb1 to your computer and use it in GitHub Desktop.
Parse Git based gems from Gemfile
def parse(path):
with open(path) as gf:
file_stream = gf.read()
import re
dependencies = []
lines = re.findall(r"\s+?gem\s\s?(?:\'|\")[a-zA-Z0-9\_\-\.]+(?:\'|\"),?\s?(?:(?:\'|\")[0-9\.]+(?:\'|\"),\s)?git:.*", file_stream)
if lines:
temp = []
for line in lines:
if re.match(".*?#\s+?.*", line):
continue
else:
temp.append(line)
for index, value in enumerate(list(temp)):
temp[index] = re.sub("\n", "", value)
for content in temp:
temp_dict = {}
for element in content.split(","):
element = re.sub("#\s+?.*", "", element)
split_kv = element.strip().split(" ")
if len(split_kv) == 2:
temp_dict[split_kv[0].strip().strip("'").strip(":")] = split_kv[1].strip().strip("'").strip("\"").strip(":")
else:
split_kv = element.strip().split(":'")
if len(split_kv) == 2:
temp_dict[split_kv[0].strip().strip("'").strip(":")] = split_kv[1].strip().strip("'").strip("\"").strip(":")
else:
temp_dict["version"] = element.strip().strip("'").strip("\"").strip(":").split(" ")[0]
dependencies.append(temp_dict)
return dependencies
import pandas as pd
# Driver code
dependencies = parse("Gemfile")
df = pd.DataFrame(dependencies)
df.to_csv('gemfile_data.csv', index=False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment