-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcompareDoc.py
More file actions
83 lines (70 loc) · 2.75 KB
/
Copy pathcompareDoc.py
File metadata and controls
83 lines (70 loc) · 2.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#! python
# New program to compare or find samples from two different files and output a
# 3 columns of information on the data of samples that are in both files. Uses
# certain convertToList.py programs to edit the existing text file to make it more
# amenable for downstream use. The three columnas that are outputed are as follows
# sequencingID, GroupID, file found in.
# An example of how to use this program is below:
## python compareDoc.py samplesToMatch.txt "FD" sample.txt -t output.txt
## samplesToMatch.txt is the file containing samples you want to check
## "FD" can be any term but this is the pattern you are selecting out for in samplesToMatch.txt
## sample.txt is the file you are searching for samples in
## -t moniker "t" if this is the first file you have searched
## output.txt is the name of the ouput file
# Read in necessary programs and functions
import sys
from convertToList import readData, identifySamples
# Read in a Command arguments for the program
# Input other instructions from here
def commandLine():
commands = sys.argv
textToConvert = commands[1]
pattern = commands[2]
mappingFile = commands[3]
start = commands[4]
outputfile = commands[5]
return textToConvert, pattern, mappingFile, start, outputfile
# Read in test data as a dictionary to modify file as needed
def readTestFile(mappingFile, pattern):
data = open(mappingFile, 'r')
testDict = {}
x = 0
for line in data:
if x != 0:
sampleID, barcode, linker, group = line.split("\t")
if pattern in group:
testDict[group.strip('\n')] = sampleID
x = x + 1
return testDict
# Make the comparison between the data and test data
def compareData(dataList, testDict):
noMatchList = []
YESMatchDict = {}
for i, group in enumerate(dataList):
try:
sample = testDict[group]
YESMatchDict[group] = sample
except KeyError:
noMatchList.append(group)
return YESMatchDict, noMatchList
# This function will output a tab-delimited text file of the samples
def saveFindings(YESMatchDict, mappingFile, start, outputfile):
#change to 'a' for appending to file rather than write (w)
outfile = open(outputfile, 'a')
if "t" in start:
print("{0}\t{1}\t{2}".format("SequencingID", "SampleID", "MapFile"),
end='\n', file=outfile)
for i in YESMatchDict:
sample = YESMatchDict[i]
print("{0}\t{1}\t{2}".format(sample, i, mappingFile),
end ='\n', file = outfile)
outfile.close()
# Run the overall program
def main():
textToConvert, pattern, mappingFile, start, outputfile = commandLine()
dataList = readData(textToConvert)
goodData = identifySamples(dataList, pattern)
testDict = readTestFile(mappingFile, pattern)
YESMatchDict, noMatchList = compareData(dataList, testDict)
saveFindings(YESMatchDict, mappingFile, start, outputfile)
if __name__ == '__main__': main()