Index: Lib/glob.py =================================================================== --- Lib/glob.py (revision 83343) +++ Lib/glob.py (working copy) @@ -38,9 +38,13 @@ glob_in_dir = glob1 else: glob_in_dir = glob0 + if basename: + sep = pathname[len(dirname):-len(basename)] + else: + sep = '' for dirname in dirs: for name in glob_in_dir(dirname, basename): - yield os.path.join(dirname, name) + yield dirname + sep + name # These 2 helper functions non-recursively glob inside a literal directory. # They return a list of basenames. `glob1` accepts a pattern while `glob0` Index: Lib/test/test_glob.py =================================================================== --- Lib/test/test_glob.py (revision 83343) +++ Lib/test/test_glob.py (working copy) @@ -105,6 +105,14 @@ eq(self.glob('sym1'), [self.norm('sym1')]) eq(self.glob('sym2'), [self.norm('sym2')]) + def test_preserve_separator(self): + eq = self.assertSequencesEqual_noorder + eq(self.glob('a*/*F'), [os.path.join(self.tempdir, "aaa/zzzF"), + os.path.join(self.tempdir, "aab/F")]) + eq(self.glob('a*//*F'), [os.path.join(self.tempdir, "aaa//zzzF"), + os.path.join(self.tempdir, "aab//F")]) + eq(self.glob('a*\\/*F'), [os.path.join(self.tempdir, "aaa\\/zzzF"), + os.path.join(self.tempdir, "aab\\/F")]) def test_main(): run_unittest(GlobTests)